【问题标题】:private static final double is 0私有静态最终双精度为 0
【发布时间】:2012-08-05 00:03:03
【问题描述】:

我正在尝试使用以下行来指定一个双常量,谁能帮我解释一下为什么在运行时这个常量的值为0.0

private static final double CONSTANT = 1/2;

【问题讨论】:

  • 我删除了支持 Alex 的答案,但我想留下的一点是 1/2 是一个 表达式 (两个整数被分割)而不是比文字值。
  • 谢谢,这很有意义。

标签: java static final private-members


【解决方案1】:

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

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

【讨论】:

  • ...当 java 将 float 放入 int 时,小数位被简单地截断,因此 0.5 变为 0。另外,+1 是第一个回答
  • @Bohemian - 在这个例子中,java 将float 放入int 的位置在哪里?
  • @StephenC 不是,我也没有说过。我只提到它是因为当整数除法的结果在数学上是一个分数时,效果是 like float 被放入 int - 数字的非整数部分被忽略
  • @Bohemian - 整数/ 运算符的正确数学描述不需要您将实数(或float)带入图片。 N / D 运算符的结果在数学上定义为Q,其中N = Q * D + R0 <= R < D。 (至少对于积极的ND
  • @StephenC ...或者只是floor(N / D),这就是我想我要说的。纳米
【解决方案2】:

该常量以0.0 的值结束,因为整数除法的结果是一个被截断的整数。所以你的初始化值是0,而不是0.5。要强制产生double 结果,请将一个或两个操作数设为double

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-04
    • 2010-11-27
    • 2012-09-29
    • 2012-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多