双精度浮点数返回0

11

这里有一个例子:

Double d = (1/3);
System.out.println(d);

这返回了0,而不是应该返回的0.33333...

有人知道吗?


1
@ΦXocę웃Пepeúpaツ 这不是重复问题。那个问题是这个问题的重复。在您标记之前查看日期。 - Zoe stands with Ukraine
3个回答

41

这是因为当您没有明确指定时,13 被视为整数(integers),所以 1/3 求值为整数(integer) 0,然后转换为双精度(double) 0。要解决这个问题,请尝试使用 (1.0/3) 或者 1D/3 来显式地说明您正在处理双精度值。


13

如果您有要使用浮点数除法进行除法运算的 int,则必须将 int 转换为 double

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

(实际上,只需要将intValue2转换为类型int,就足以使intValue1自动转换为类型double。我相信这样就可以了。)

1

除非需要在对象范畴内使用这些值,否则请使用 double 而非 Double。要注意 自动装箱 的概念。


OP 询问了 Java 的截断方法,以及为什么整数的除法会被截断,即使它们存储在 double 中;而不是关于自动装箱的问题。 - ameed

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接