Java 双精度值返回0

Java 双精度值返回0,java,division,Java,Division,下面是一个例子: Double d = (1/3); System.out.println(d); 这将返回0,而不是0.33333。。。应该如此 有人知道吗?这是因为当您不另行指定时,1和3被视为整数,因此1/3计算为整数0,然后转换为双精度0。要修复此问题,请尝试(1.0/3),或者1D/3明确声明您正在处理双值。如果您有int要使用浮点除法进行除法,则必须将int转换为双精度: double d = (double)intValue1 / (double)intValue2 (事实上,

下面是一个例子:

Double d = (1/3);
System.out.println(d);
这将返回0,而不是0.33333。。。应该如此


有人知道吗?

这是因为当您不另行指定时,
1
3
被视为
整数,因此
1/3
计算为
整数
0
,然后转换为
双精度
0
。要修复此问题,请尝试
(1.0/3)
,或者
1D/3
明确声明您正在处理双值。

如果您有
int
要使用浮点除法进行除法,则必须将
int
转换为
双精度

double d = (double)intValue1 / (double)intValue2

(事实上,我相信,只有强制转换
intValue2
就足以让
intValue1
自动转换为
double

使用double而不是double,除非您需要在对象意义上使用这些值。注意概念

OP询问Java的截断方法,以及为什么整数的除法会被截断,即使它存储在一个double中;不是关于自动装箱。@ΦXocę웃Пepeúpaツ 它不是复制品。那个问题是这个问题的重复。在你打旗子之前先看一下日期