Java中(double)(1/2)和(double)1/2的区别是什么?

3
我想了解以下两者之间的区别:
System.out.print((double)1/2);
System.out.print((double)(1/2));

我收到的第一个答案是0.5,但第二个答案是0.0。 提前谢谢。
3个回答

7

(double)(1/2) 首先计算 1/2,由于是整数除法,结果为 0,然后将结果强制转换为 double 类型(得到 0.0)。

(double)1/2 首先将 1 强制转换为 double 类型,然后执行浮点数除法,即 1.0/21/2.0,结果为 0.5


本来也想回答同样的问题!非常好而且简短的回答! - Andrew Li
谢谢,这解释了很多。 - Saeed Hassan
抢先一步了 :) 很好的答案! - Dando18
1.0/2.0 为了完整起见 ;) - luk2302

1
差异在于运算符优先级和类型提升。在(double)1/2的情况下,1被转换为double并在将int 2提升为double 2.0后除以2,即进行了double除法运算。在(double)(1/2)的情况下,执行整数除法,因此结果为0,然后转换为double,即0.0。

1
运算符优先级,而非偏好 :) - Andrew Li
抱歉,已更正。 - sim

1

(double) (1/2),其中(1/2)被计算为0,因为1和2是整数,小数部分被截断。先计算1/2

(double) 1/2((double)1)/2相同,它将返回一个双精度答案,因此小数部分不会被截断。


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