我正在编写这段代码:
public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}
结果为0。为什么会这样,我该如何解决这个问题?我正在编写这段代码:
public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}
结果为0。为什么会这样,我该如何解决这个问题?1和3是整数常量,因此Java进行整数除法,其结果为0。如果您想编写双精度常量,则必须编写1.0
和3.0
。
由于它将1和3视为整数,因此将结果向下舍入为0,使其成为整数。
要获得您要查找的结果,请明确告诉Java这些数字是双精度,如下所示:
double g = 1.0/3.0;
public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}
由于1和3都是整数,所以结果不是四舍五入而是截断。 因此,您忽略小数部分并仅取整数部分。
为避免这种情况,请将您的数字中至少有一个设置为十进制形式1.0和/或3.0。
1.0 * 1 / 3
以获得浮点除法。当您有无法在其后添加.0的变量时,这更加有用,例如:import java.io.*;
public class Main {
public static void main(String[] args) {
int x = 10;
int y = 15;
System.out.println(1.0 * x / y);
}
}
(1/3) 表示整数除法,因此您无法从此除法获得小数值。 要解决此问题,请使用:
public static void main(String[] args) {
double g = 1.0 / 3;
System.out.printf("%.2f", g);
}
我的代码是:
System.out.println("enter weight: ");
int weight = myObj.nextInt();
System.out.println("enter height: ");
int height = myObj.nextInt();
double BMI = weight / (height *height)
System.out.println("BMI is: " + BMI);
doubleouble BMI = (double) weight / ((double)height * (double)height);
选项2:
double BMI = (double) weight / (height * height);
试一下这个:
public static void main(String[] args) {
double a = 1.0;
double b = 3.0;
double g = a / b;
System.out.printf(""+ g);
}
许多人都没有指出真正的问题:
仅对整数进行操作会将操作结果转换为整数。
这必然意味着浮点数结果,即使可以显示为整数,也将被截断(去掉小数部分)。
你问什么是类型转换?
它因语言实现而异,但维基百科有一个相当全面的视角,并且它也谈到了强制转换,这是回答你的问题的关键信息。
1/2
,并没有涉及到类型转换或类型转化,至少在目标语言(Java)中是这样的。你只需要调用一个整数除法,结果将会是一个整数。类型转换只是因为在赋值过程中从 int
转换成了 double
。 - YoYo0.5
。在Java中,1/2
是一个整数除法,结果为零整数。你可以将零赋值给double,它仍然是零,尽管是一个0.0
的double。 - YoYo