为什么这段代码不起作用?实际上,这只是大型项目的一小部分。它必须将Double.MIN_VALUE
与不同的值进行比较,它适用于除0.
以外的所有值,为什么?谢谢!
double d = Double.MIN_VALUE;
if (0. > d) {
System.out.println("OK");
}
答案 0 :(得分:4)
Double.MIN_VALUE
是4.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)返回的值。”