比较Double.MIN_VALUE和0

时间:2015-06-05 11:26:34

标签: java if-statement double

为什么这段代码不起作用?实际上,这只是大型项目的一小部分。它必须将Double.MIN_VALUE与不同的值进行比较,它适用于除0.以外的所有值,为什么?谢谢!

double d = Double.MIN_VALUE;
if (0. > d) {
    System.out.println("OK");
}

5 个答案:

答案 0 :(得分:4)

Double.MIN_VALUE4.9E-324。这不低于0。但它实际上并不是0

如果您打印

System.out.println(4.9E-324d > 0.);//this is true

从这个意义上说,

  

0.0000000000 ... 0001!= 0.但它倾向于0

同样的方式4.9E-324d != 0 but tends to 0

答案 1 :(得分:2)

您正在进行十进制数比较。如果你说尝试类似的东西:

 System.out.println(0.000000000000001d == 0.);//print false

你会得到假的。如果我阅读java文档,它会说:

/**
 * A constant holding the smallest positive nonzero value of type
 * {@code double}, 2<sup>-1074</sup>. It is equal to the
 * hexadecimal floating-point literal
 * {@code 0x0.0000000000001P-1022} and also equal to
 * {@code Double.longBitsToDouble(0x1L)}.
 */

所以它接近零但不是真的。

答案 2 :(得分:2)

Double.MIN_VALUE实际上是Java中常量的坏名称。它不适合int.MIN_VALUE。在C#中,它被称为Double.Epsilon,恕我直言更合适。

因此,Double.MIN_VALUE不是存在的最大负双值。恕我直言,默认情况下,这样的常数甚至不存在于JAVA中。

答案 3 :(得分:0)

Double.MIN_VALUE等于十六进制浮点文字0x0.0000000000001P-1022,也等于Double.longBitsToDouble(0x1L).

所以你的病情失败了!

答案 4 :(得分:0)

如果您希望将值与最小数字(具有最大幅度的负值)进行比较,您可能需要查看Java文档所述的Double.NEGATIVE_INFINITY

“保持double类型的负无穷大的常量。它等于Double.longBitsToDouble(0xfff0000000000000L)返回的值。”