2011-07-23 18 views
7

En el siguiente programa, el resultado es que 0.0 se considera menor que Double.MIN_VALUE. ¿Por qué?¿Por qué falla el autoboxing/unboxing aquí?

Tenemos una solución (solo trabajamos con Doubles y utilizamos compareTo) y quiero entender por qué unboxing está fallando aquí.

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 
    } 
} 
+0

Vamos a agregar un enlace a una pregunta SO anterior que tiene una respuesta excelente de @aioobe. IMO Sun debería haber llamado a esta constante algo más intuitivo, pero esa nave ha navegado. http://stackoverflow.com/questions/3884793/minimum-values-and-double-min-value-in-java – Perception

Respuesta

11

Según la Javadocs:

MIN_VALUE

Una constante que sostiene el valor distinto de cero positivo más pequeño de tipo doble, 2 -1074.

En otras palabras, es más grande que 0.

5

Debe leer la especificación Double.MIN_VALUE. Es un valor doble mínimo posible pero positivo, lo que significa que es más grande que 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

Double.MIN_VALUE = 4.9E-324 que sigue siendo un número positivo. Creo que estás buscando min = - Double.MAX_VALUE

2

Según mi autoboxing no tiene problemas. Quizás simplemente necesite usar algo como Double.NEGATIVE_INFINITY o Double.POSITIVE_INFINITY que debería funcionar bien con los operadores < y>. Por ejemplo, tenga en cuenta que

-Double.MAX_VALUE > Double.NEGATIVE_INFINITY
es verdadero.

Cuestiones relacionadas