【问题标题】:Java: Compare Double 0 with Min/MaxJava:将双0与最小值/最大值进行比较
【发布时间】:2020-02-19 11:38:27
【问题描述】:

我尝试将 Doubles Min/Max 与 0.0 进行比较。

Double min = Double.MIN_VALUE;
Double max = Double.MAX_VALUE;

Double d = new Double (0.0);

System.out.println (min < d);
System.out.println (min.compareTo (d) < 0);

System.out.println (d < max);
System.out.println (d.compareTo (max) < 0);

我希望所有输出都是真实的。

但是我得到了

false
false
true
true

为什么?

【问题讨论】:

标签: java


【解决方案1】:

查看Double.MIN_VALUEdocumentation,上面写着:

一个保持双精度类型的最小非零值2-1074的常数。

所以这是一个大于 0 的值,这就是为什么如果你检查它是否小于零,你会为“假”。

【讨论】:

    【解决方案2】:

    该问题与IEEE-754 有关。事实上,Double.MIN_VALUE 等于 machine-epsilon,即0.00000...00 所代表的数字。可能的最小双精度应称为

    -Double.MAX_VALUE.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多