2011-07-23 110 views
7

在下面的程序中,結果是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 
    } 
} 
+0

打算添加一個鏈接到一個以前的問題,從@aioobe有一個很好的答案。國際海事組織太陽應該已經命名這個不斷更直觀的東西,但這艘船已經航行。 http://stackoverflow.com/questions/3884793/minimum-values-and-double-min-value-in-java – Perception

回答

11

按照Javadocs

MIN_VALUE

的常量保持的最小正非零double類型的值,2 -1074

換句話說,它是大於0

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). 
2

Double.MIN_VALUE = 4.9E-324這仍然是一個正數。我認爲你正在尋找min = - Double.MAX_VALUE

2

根據我autoboxing沒有問題。 也許你只需要使用類似Double.NEGATIVE_INFINITY或Double.POSITIVE_INFINITY的應該可以很好地與<和>運算符配合使用。例如注意

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