Java 私有静态最终双精度为0
我正试图使用下面的行来指定一个双常量,有人能帮我解释一下为什么在运行时这个常量的值是Java 私有静态最终双精度为0,java,static,final,private-members,Java,Static,Final,Private Members,我正试图使用下面的行来指定一个双常量,有人能帮我解释一下为什么在运行时这个常量的值是0.0: private static final double CONSTANT = 1/2; 1和2被解释为整数,并产生除法的整数结果。在末尾添加D,使其解释为双精度 private static final double CONSTANT = 1D/2D; 该常量的值为0.0,因为整数除法的结果是一个被截断的整数。因此,您的初始化值是0,而不是0.5。要强制一个double结果,请将一个或两个操作数设为
0.0
:
private static final double CONSTANT = 1/2;
1和2被解释为整数,并产生除法的整数结果。在末尾添加D,使其解释为双精度
private static final double CONSTANT = 1D/2D;
该常量的值为
0.0
,因为整数除法的结果是一个被截断的整数。因此,您的初始化值是0
,而不是0.5
。要强制一个double
结果,请将一个或两个操作数设为double
:
private static final double CONSTANT = 1/2.0; // or 1/2D, or even 1D/2D
…当java将
float
放入int
时,小数位被简单地截断,因此0.5
变为0
。另外,第一个到达的时间为+1answer@Bohemian-在本例中,java将float
放入int
的位置在哪里?@StephenC不是,我也没有说它是。我之所以提到它,是因为当整数除法的结果在数学上是一个分数时,其效果就像一个浮点
被放入一个整数
——数字的非整数部分是ignored@Bohemian-整数/
运算符的正确数学描述不需要带实数(或float
)到图片中。N/D
运算符的结果在数学上定义为Q
,其中N=Q*D+R
,和0@StephenC…或简单的floor(N/D)
,这就是我想说的。nmI删除了我的答案,支持Alex的答案,但我想留下的一点是,1/2
是一个表达式(两个整数被除),而不是一个文字值。谢谢,这很有意义。