我写了这段代码:
public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}
结果是0。为什么会这样,我该如何解决这个问题?
发布于 2011-01-14 05:27:07
两个操作数(1和3)是整数,因此使用整数运算(这里是除法)。将结果变量声明为double只会导致除法后发生隐式转换。
当然,整数除法返回四舍五入为零的除法的真实结果。因此,0.333...
的结果在这里四舍五入为0。(请注意,处理器实际上并不进行任何舍入,但您仍然可以这样认为。)
另外,请注意,如果两个操作数(数字)都是以浮点数形式给出的: 3.0和1.0,甚至是第一个,则使用浮点算术,从而得到0.333...
。
发布于 2011-01-14 05:31:09
1/3
使用整数除法,因为两边都是整数。
您至少需要其中一个是float
或double
。
如果像您的问题一样在源代码中输入值,则可以执行1.0/3
;1.0
是一个双精度型。
如果您从其他地方获得值,则可以使用(double)
将int
转换为double
。
int x = ...;
int y = ...;
double value = ((double) x) / y;
发布于 2011-01-14 05:26:28
将其显式转换为double
double g = 1.0/3.0
这是因为Java对1
和3
使用了整数除法运算,因为它们是作为整数常量输入的。
https://stackoverflow.com/questions/4685450
复制相似问题