Почему автобокс / распаковка терпит неудачу здесь? - PullRequest
7 голосов
/ 23 июля 2011

В программе ниже результат 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 ]

11 голосов
/ 23 июля 2011

Согласно Javadocs :

MIN_VALUE

Константа, содержащая наименьшее положительное ненулевое значение типа double, 2 -1074 .

Другими словами, оно больше 0.

5 голосов
/ 23 июля 2011

Вы должны прочитать спецификацию 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). 
2 голосов
/ 23 июля 2011

По мне автобокс проблем не имеет.Возможно, вам просто нужно использовать что-то вроде Double.NEGATIVE_INFINITY или Double.POSITIVE_INFINITY, которое должно хорошо работать с операторами <и>.Например, обратите внимание, что

-Double.MAX_VALUE > Double.NEGATIVE_INFINITY
- это правда!
2 голосов
/ 23 июля 2011

Double.MIN_VALUE = 4.9E-324, что все еще является положительным числом. Я думаю, что вы ищете min = - Double.MAX_VALUE

...