2011-07-23 13 views
7

W poniższym programie wynik jest następujący: 0.0 jest uważany za mniejszy niż Double.MIN_VALUE. Czemu?Dlaczego tu kończy się autoboxing/unboxing?

Mamy rozwiązanie (pracujemy tylko z Doubles i używamy compareTo) i chcę zrozumieć, dlaczego rozpakowywanie się tutaj nie udaje.

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

Przechodzę, aby dodać link do poprzedniego pytania SO, które ma doskonałą odpowiedź z @ aioobe. IMO Sun powinien nazwać tę stałą czymś bardziej intuicyjnym, ale ten statek płynął. http://stackoverflow.com/questions/3884793/minimum-values-and-double-min-value-in-java – Perception

Odpowiedz

11

Według Javadocs:

MIN_VALUE

Stała posiadający najmniejszą wartość dodatnią wartość niezerową typu podwójnego, 2 -1074.

Innymi słowy, jest większa niż 0.

5

Należy przeczytać specyfikację Double.MIN_VALUE. Jest to minimalna możliwa, ale dodatnia wartość podwójna, co oznacza, że ​​jest większa niż 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, która nadal jest liczbą dodatnią. Myślę, że szukacie min = - Double.MAX_VALUE

2

Według mnie autoboxing nie ma problemów. Być może po prostu musisz użyć czegoś takiego jak Double.NEGATIVE_INFINITY lub Double.POSITIVE_INFINITY, który powinien dobrze działać z operatorami < i>. Na przykład zauważ, że

-Double.MAX_VALUE > Double.NEGATIVE_INFINITY
jest prawdziwe!