2012-08-05 19 views
3

我尝试使用下面的行指定一个双不变,任何人可以帮助解释我为什么在运行此常量的0.0值:私有静态最后双0

private static final double CONSTANT = 1/2; 
+0

我删除我的答案赞成亚历克斯的,但有一点我想留下的是'1/2'是*表达式*(两个整数被分割)而不是字面值。 – 2012-08-05 00:23:59

+0

谢谢,这很有道理。 – 2012-08-05 00:30:34

回答

10

1和2被解释为整数并产生除法的整数结果。在结尾添加D以使它们解释为双打。

private static final double CONSTANT = 1D/2D; 
+0

......并且当java把'float'放入'int'时,小数位被简单地截断,所以'0.5'变成'0'。另外,+1是第一个回答 – Bohemian 2012-08-05 00:06:44

+0

@波希米亚语 - 在这个例子中,java将'float'放入'int'的位置? – 2012-08-05 00:16:23

+0

@StephenC不是,我也没有说过。我只提到它,因为当整数除法的结果是数学上的一小部分时,效果就像*'float'被放入'int'中 - 数字的非整数部分被忽略 – Bohemian 2012-08-05 00:30:44

7

因为整数除法的结果是一个整数,截断恒定结束了的0.0的值。所以你初始化的值是0,而不是0.5。要强制double结果,使操作数的一个或两个double

private static final double CONSTANT = 1/2.0; // or 1/2D, or even 1D/2D