8

在下面的程序中,结果被0.0认为小于Double.MIN_VALUE。为什么?

我们有一个解决方案(Doubles仅使用和使用compareTo),我想了解为什么在这里拆箱失败。

import java.util.Date;
import java.util.Calendar;
import java.math.BigDecimal;

public class Test {

  public static void main(String[] args) {
    double max = 99999.9999;
    double min = Double.MIN_VALUE;
    Double test = 0.0;

    System.out.println(max > test); // expect true; is true
    System.out.println(test > min); // expect true; is false
  }
}
4

4 回答 4

11

根据Javadocs

MIN_VALUE

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

换句话说,它大于 0。

于 2011-07-23T13:08:40.437 回答
5

您应该阅读Double.MIN_VALUE规范。这是一个最小的可能但正的 Double 值,这意味着它大于 0.0。

A constant holding the smallest positive nonzero value of type double, 2-1074.
It is equal to the hexadecimal floating-point literal 0x0.0000000000001P-1022
and also equal to Double.longBitsToDouble(0x1L). 
于 2011-07-23T13:09:10.990 回答
2

Double.MIN_VALUE = 4.9E-324这仍然是一个正数。我想你正在寻找min = - Double.MAX_VALUE

于 2011-07-23T13:13:08.287 回答
2

据我说,自动装箱没有问题。也许您只需要使用像 Double.NEGATIVE_INFINITY 或 Double.POSITIVE_INFINITY 这样应该与 < 和 > 运算符一起工作的东西。例如注意

-Double.MAX_VALUE > Double.NEGATIVE_INFINITY
是真的!

于 2011-07-23T13:23:30.867 回答