我正在尝试使用以下行来指定一个双常量,任何人都可以帮我解释为什么在运行时这个常量的值为0.0
:
private static final double CONSTANT = 1/2;
答案 0 :(得分:10)
1和2被解释为整数并产生除法的整数结果。在末尾添加D以使它们被解释为双精度。
private static final double CONSTANT = 1D/2D;
答案 1 :(得分:7)
常量最后得到0.0
的值,因为整数除法的结果是整数,被截断。因此,初始化的值为0
,而不是0.5
。要强制double
结果,请将一个或两个操作数设为double
:
private static final double CONSTANT = 1/2.0; // or 1/2D, or even 1D/2D