JavaTM 2 Platform
Standard Ed. 6

java.lang
類別 Double

java.lang.Object
  繼承者 java.lang.Number
      繼承者 java.lang.Double
所有已實作的介面:
Serializable, Comparable<Double>

public final class Double
extends Number
implements Comparable<Double>

Double 類別在物件中包裹一個基本型別 double 的值。每個 Double 型別的物件都包含一個 double 型別的欄位。

此外,該類別還提供多個方法,可以將 double 轉換為 String,將 String 轉換為 double,也提供了其他一些處理 double 時有用的常數和方法。

從以下版本開始:
JDK1.0
另請參見:
序列化表格

欄位摘要
static int MAX_EXPONENT
          有限 double 變數可能具有的最大指數。
static double MAX_VALUE
          保存 double 型別的最大正有限值的常數,最大正有限值為 (2-2-52)·21023
static int MIN_EXPONENT
          標準化 double 變數可能具有的最小指數。
static double MIN_NORMAL
          保存 double 型別的最小正標準值的常數,最小正標準值為 2-1022
static double MIN_VALUE
          保存 double 型別的最小正非零值的常數,最小正非零值為 2-1074
static double NaN
          保存 double 型別的 NaN 值的常數。
static double NEGATIVE_INFINITY
          保存 double 型別的負無窮大值的常數。
static double POSITIVE_INFINITY
          保存 double 型別的正無窮大值的常數。
static int SIZE
          用於表示 double 值的位數。
static Class<Double> TYPE
          表示基本型別 doubleClass 實例。
 
建構子摘要
Double(double value)
          建構一個新分派的 Double 物件,它表示基本的 double 參數。
Double(String s)
          建構一個新分派的 Double 物件,表示用字元串表示的 double 型別的浮點值。
 
方法摘要
 byte byteValue()
          以 byte 形式返回此 Double 的值(通過強制轉換為 byte)。
static int compare(double d1, double d2)
          比較兩個指定的 double 值。
 int compareTo(Double anotherDouble)
          對兩個 Double 物件所表示的數值進行比較。
static long doubleToLongBits(double value)
          根據 IEEE 754 浮點雙精度格式 ("double format") 位佈局,返回指定浮點值的表示形式。
static long doubleToRawLongBits(double value)
          根據 IEEE 754 浮點“雙精度格式”位佈局,返回指定浮點值的表示形式,並保留 NaN 值。
 double doubleValue()
          返回此 Double 物件的 double 值。
 boolean equals(Object obj)
          將此物件與指定物件比較。
 float floatValue()
          返回此 Double 物件的 float 值。
 int hashCode()
          返回此 Double 物件的雜湊碼。
 int intValue()
          以 int 形式返回此 Double 的值(通過強制轉換為 int 型別)。
 boolean isInfinite()
          如果此 Double 值在數值上為無窮大,則返回 true;否則返回 false
static boolean isInfinite(double v)
          如果指定數在數值上為無窮大,則返回 true;否則返回 false
 boolean isNaN()
          如果此 Double 值是非數字(NaN)值,則返回 true;否則返回 false
static boolean isNaN(double v)
          如果指定的數是一個 NaN 值,則返回 true;否則返回 false
static double longBitsToDouble(long bits)
          返回對應於給定位表示形式的 double 值。
 long longValue()
          以 long 形式返回此 Double 的值(通過強制轉換為 long 型別)。
static double parseDouble(String s)
          返回一個新的 double 值,該值被初始化為用指定 String 表示的值,這與 Double 類別的 valueOf 方法一樣。
 short shortValue()
          以 short 形式返回此 Double 的值(通過強制轉換為 short)。
static String toHexString(double d)
          返回 double 參數的十六進制字元串表示形式。
 String toString()
          返回此 Double 物件的字元串表示形式。
static String toString(double d)
          返回 double 參數的字元串表示形式。
static Double valueOf(double d)
          返回表示指定的 double 值的 Double 實例。
static Double valueOf(String s)
          返回保存用參數字元串 s 表示的 double 值的 Double 物件。
 
從類別 java.lang.Object 繼承的方法
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
 

欄位詳細資訊

POSITIVE_INFINITY

public static final double POSITIVE_INFINITY
保存 double 型別的正無窮大值的常數。它等於 Double.longBitsToDouble(0x7ff0000000000000L) 返回的值。

另請參見:
常數欄位值

NEGATIVE_INFINITY

public static final double NEGATIVE_INFINITY
保存 double 型別的負無窮大值的常數。它等於 Double.longBitsToDouble(0xfff0000000000000L) 返回的值。

另請參見:
常數欄位值

NaN

public static final double NaN
保存 double 型別的 NaN 值的常數。它等於 Double.longBitsToDouble(0x7ff8000000000000L) 返回的值。

另請參見:
常數欄位值

MAX_VALUE

public static final double MAX_VALUE
保存 double 型別的最大正有限值的常數,最大正有限值為 (2-2-52)·21023。它等於十六進制的浮點文字值 0x1.fffffffffffffP+1023,也等於 Double.longBitsToDouble(0x7fefffffffffffffL)

另請參見:
常數欄位值

MIN_NORMAL

public static final double MIN_NORMAL
保存 double 型別的最小正標準值的常數,最小正標準值為 2-1022。它等於十六進制的浮點文字值 0x1.0p-1022,也等於 Double.longBitsToDouble(0x0010000000000000L)

從以下版本開始:
1.6
另請參見:
常數欄位值

MIN_VALUE

public static final double MIN_VALUE
保存 double 型別的最小正非零值的常數,最小正非零值為 2-1074。它等於十六進制的浮點文字值 0x0.0000000000001P-1022,也等於 Double.longBitsToDouble(0x1L)

另請參見:
常數欄位值

MAX_EXPONENT

public static final int MAX_EXPONENT
有限 double 變數可能具有的最大指數。它等於 Math.getExponent(Double.MAX_VALUE) 返回的值。

從以下版本開始:
1.6
另請參見:
常數欄位值

MIN_EXPONENT

public static final int MIN_EXPONENT
標準化 double 變數可能具有的最小指數。它等於 Math.getExponent(Double.MIN_NORMAL) 返回的值。

從以下版本開始:
1.6
另請參見:
常數欄位值

SIZE

public static final int SIZE
用於表示 double 值的位數。

從以下版本開始:
1.5
另請參見:
常數欄位值

TYPE

public static final Class<Double> TYPE
表示基本型別 doubleClass 實例。

從以下版本開始:
JDK1.1
建構子詳細資訊

Double

public Double(double value)
建構一個新分派的 Double 物件,它表示基本的 double 參數。

參數:
value - 用 Double 表示的值。

Double

public Double(String s)
       throws NumberFormatException
建構一個新分派的 Double 物件,表示用字元串表示的 double 型別的浮點值。該方法與 valueOf 方法一樣,可將字元串轉換為 double 值。

參數:
s - 要轉換為 Double 的字元串。
拋出:
NumberFormatException - 如果字元串不包含可解析的數字。
另請參見:
valueOf(java.lang.String)
方法詳細資訊

toString

public static String toString(double d)
返回 double 參數的字元串表示形式。下面提到的所有字元都是 ASCII 字元。 必須為 ma 的小數部分顯示多少位呢?至少必須有一位數來表示小數部分,除此之外,需要更多(但只能和需要的一樣多)位數來唯一地區分參數值和 double 型別的鄰近值。這就是說,假設 x 是用十進製表示法表示的精確算術值,是通過對有限非 0 參數 d 調用此方法產生的。那麼 d 一定是最接近 xdouble 值;如果兩個 double 值都同等地接近 x,那麼 d 必須是其中之一,並且 d 的有效數字的最低有效位必須是 0

要創建浮點值的本地化字元串表示形式,請使用 NumberFormat 的子類別。

參數:
d - 要轉換的 double 值。
返回:
參數的字元串表示形式。

toHexString

public static String toHexString(double d)
返回 double 參數的十六進制字元串表示形式。下面提到的所有字元都是 ASCII 字元。

範例

浮點值十六進制字元串
1.0 0x1.0p0
-1.0 -0x1.0p0
2.0 0x1.0p1
3.0 0x1.8p1
0.5 0x1.0p-1
0.25 0x1.0p-2
Double.MAX_VALUE 0x1.fffffffffffffp1023
Minimum Normal Value 0x1.0p-1022
Maximum Subnormal Value 0x0.fffffffffffffp-1022
Double.MIN_VALUE 0x0.0000000000001p-1022

參數:
d - 要轉換的 double 值。
返回:
參數的十六進制字元串表示形式。
從以下版本開始:
1.5

valueOf

public static Double valueOf(String s)
                      throws NumberFormatException
返回保存用參數字元串 s 表示的 double 值的 Double 物件。

如果 snull,則拋出 NullPointerException 異常。

忽略 s 中的前導空白字元和尾部空白字元。就像調用 String.trim() 方法那樣移除空白;這就是說,ASCII 空格和控制字元都要移除。s 的其餘部分應該按詞法語法規則所描述的那樣構成一個 FloatValue

FloatValue:
Signopt NaN
Signopt Infinity
Signopt FloatingPointLiteral
Signopt HexFloatingPointLiteral
SignedInteger

HexFloatingPointLiteral:
HexSignificand BinaryExponent FloatTypeSuffixopt

HexSignificand:
HexNumeral
HexNumeral .
0x HexDigitsopt. HexDigits
0X HexDigitsopt. HexDigits

BinaryExponent:
BinaryExponentIndicator SignedInteger

BinaryExponentIndicator:
p
P
其中 SignFloatingPointLiteralHexNumeralHexDigitsSignedIntegerFloatTypeSuffixJava Language Specification 的詞法結構部分中定義的相同。如果 s 不具有 FloatValue 的形式,則拋出 NumberFormatException。否則,可以認為 s 是一個以常用的“電腦科學記數法”表示的精確十進制值,或者是一個精確的十六進制值;在概念上,這個精確的數值將被轉換為一個“無限精確的”二進制值,然後根據常用的 IEEE 754 浮點演算法的“捨入為最接近的數”規則,將該值捨入為 double 型別,其中包括保留 0 值的符號。最後,返回表示此 double 值的 Double 物件。

要解釋浮點值的本地化字元串表示形式,請使用 NumberFormat 的子類別。

注意,尾部格式說明符、確定浮點文字值型別的說明符(1.0f 是一個 float 值;1.0d 是一個 double 值)不會 影響此方法的結果。換句話說,輸入字元串的數值被直接轉換為目標浮點型別。分兩步的轉換(先將字元串轉換為 float,然後將 float 轉換為 double 同於直接將字元串轉換為 double。例如,float 文字值 0.1f 等於 double0.10000000149011612float 文字值 0.1f 表示與 double 文字值 0.1 不同的數值。(數值 0.1 無法用二進制浮點數準確表示。)

為了避免因為對無效字元串調用此方法而導致拋出 NumberFormatException,可以使用以下正則表達式作為輸入到螢幕的字元串:

        final String Digits     = "(\\p{Digit}+)";
  final String HexDigits  = "(\\p{XDigit}+)";
        // an exponent is 'e' or 'E' followed by an optionally 
        // .
        final String Exp        = "[eE][+-]?"+Digits;
        final String fpRegex    =
            ("[\\x00-\\x20]*"+        // Optional leading "whitespace"
             "[+-]?(" +       // Optional sign character
             "NaN|" +         // "NaN" string
             "Infinity|" +    // "Infinity" string

             // A decimal floating-point string representing a finite positive
             // number without a leading sign has at most five basic pieces:
             // Digits . Digits ExponentPart FloatTypeSuffix
             // 
             // Since this method allows integer-only strings as input
             // in addition to strings of floating-point literals, the
             // two sub-patterns below are simplifications of the grammar
             // productions from the Java Language Specification, 2nd 
             // edition, section 3.10.2.

             // Digits ._opt Digits_opt ExponentPart_opt FloatTypeSuffix_opt
             "((("+Digits+"(\\.)?("+Digits+"?)("+Exp+")?)|"+

             // . Digits ExponentPart_opt FloatTypeSuffix_opt
             "(\\.("+Digits+")("+Exp+")?)|"+

       // Hexadecimal strings
       "((" +
        // 0[xX] HexDigits ._opt BinaryExponent FloatTypeSuffix_opt
        "(0[xX]" + HexDigits + "(\\.)?)|" +

        // 0[xX] HexDigits_opt . HexDigits BinaryExponent FloatTypeSuffix_opt
        "(0[xX]" + HexDigits + "?(\\.)" + HexDigits + ")" +

        ")[pP][+-]?" + Digits + "))" +
             "[fFdD]?))" +
             "[\\x00-\\x20]*");// Optional trailing "whitespace"
            
  if (Pattern.matches(fpRegex, myString))
            Double.valueOf(myString); // Will not throw NumberFormatException
        else {
            // Perform suitable alternative action
        }
 

參數:
s - 要解析的字元串。
返回:
保存用 String 參數表示的值的 Double 物件。
拋出:
NumberFormatException - 如果字元串不包含可解析的數。

valueOf

public static Double valueOf(double d)
返回表示指定的 double 值的 Double 實例。如果不需要新的 Double 實例,則通常應優先使用此方法,而不是建構子 Double(double),因為此方法可能通過快取記憶體經常請求的值來顯著提高空間和時間性能。

參數:
d - 一個 double 值。
返回:
表示 dDouble 實例。
從以下版本開始:
1.5

parseDouble

public static double parseDouble(String s)
                          throws NumberFormatException
返回一個新的 double 值,該值被初始化為用指定 String 表示的值,這與 Double 類別的 valueOf 方法一樣。

參數:
s - 要解析的字元串。
返回:
由字元串參數表示的 double 值。
拋出:
NumberFormatException - 如果字元串不包含可解析的 double 值。
從以下版本開始:
1.2
另請參見:
valueOf(String)

isNaN

public static boolean isNaN(double v)
如果指定的數是一個 NaN 值,則返回 true;否則返回 false

參數:
v - 要測試的值。
返回:
如果參數值為 NaN,則返回 true;否則返回 false

isInfinite

public static boolean isInfinite(double v)
如果指定數在數值上為無窮大,則返回 true;否則返回 false

參數:
v - 要測試的值。
返回:
如果參數值是正無窮大或負無窮大,則返回 true;否則返回 false

isNaN

public boolean isNaN()
如果此 Double 值是非數字(NaN)值,則返回 true;否則返回 false

返回:
如果此物件表示的值為 NaN,則返回 true;否則返回 false

isInfinite

public boolean isInfinite()
如果此 Double 值在數值上為無窮大,則返回 true;否則返回 false

返回:
如果此物件所表示的值是正無窮大或負無窮大,則返回 true;否則返回 false

toString

public String toString()
返回此 Double 物件的字元串表示形式。使用此物件表示的基本 double 值被轉換為一個字元串,這與帶一個參數的 toString 方法完全一樣。

覆寫:
類別 Object 中的 toString
返回:
此物件的 String 表示形式。
另請參見:
toString(double)

byteValue

public byte byteValue()
byte 形式返回此 Double 的值(通過強制轉換為 byte)。

覆寫:
類別 Number 中的 byteValue
返回:
轉換為 byte 型別的由此物件所表示的 double
從以下版本開始:
JDK1.1

shortValue

public short shortValue()
short 形式返回此 Double 的值(通過強制轉換為 short)。

覆寫:
類別 Number 中的 shortValue
返回:
轉換為 short 型別的由此物件所表示的 double
從以下版本開始:
JDK1.1

intValue

public int intValue()
int 形式返回此 Double 的值(通過強制轉換為 int 型別)。

指定者:
類別 Number 中的 intValue
返回:
轉換為 int 型別的由此物件所表示的 double

longValue

public long longValue()
long 形式返回此 Double 的值(通過強制轉換為 long 型別)。

指定者:
類別 Number 中的 longValue
返回:
轉換為 long 型別的由此物件所表示的 double

floatValue

public float floatValue()
返回此 Double 物件的 float 值。

指定者:
類別 Number 中的 floatValue
返回:
轉換為 float 型別的由此物件所表示的 double
從以下版本開始:
JDK1.0

doubleValue

public double doubleValue()
返回此 Double 物件的 double 值。

指定者:
類別 Number 中的 doubleValue
返回:
此物件所表示的 double

hashCode

public int hashCode()
返回此 Double 物件的雜湊碼。結果是此 Double 物件所表示的基本 double 值的 long 整數位表示形式(與 doubleToLongBits(double) 方法產生的結果完全一樣)兩部分整數之間的異或 (XOR)。也就是說,雜湊碼就是以下表達式的值:
 (int)(v^(v>>>32))
 
其中 v 的定義為:
 long v = Double.doubleToLongBits(this.doubleValue());
 

覆寫:
類別 Object 中的 hashCode
返回:
此物件的 hashCode 值。
另請參見:
Object.equals(java.lang.Object), Hashtable

equals

public boolean equals(Object obj)
將此物件與指定物件比較。當且僅當參數不是 null 而是 Double 物件,且表示的 Double 值與此物件表示的 double 值相同時,結果為 true。為此,當且僅當將方法 doubleToLongBits(double) 應用於兩個值所返回的 long 值相同時,才認為這兩個 double 值相同。

注意,在大多數情況下,對於 Double 類別的兩個實例 d1d2,當且僅當

   d1.doubleValue() == d2.doubleValue()
 

true 時,d1.equals(d2) 的值才為 true。但是,有以下兩種例外情況:

此定義使得雜湊表得以正確操作。

覆寫:
類別 Object 中的 equals
參數:
obj - 要與之進行比較的物件。
返回:
如果物件相同,則返回 true;否則返回 false
另請參見:
doubleToLongBits(double)

doubleToLongBits

public static long doubleToLongBits(double value)
根據 IEEE 754 浮點雙精度格式 ("double format") 位佈局,返回指定浮點值的表示形式。

第 63 位(遮罩碼 0x8000000000000000L 選定的位)表示浮點數的符號。第 62-52 位(遮罩碼 0x7ff0000000000000L 選定的位)表示指數。第 51-0 位(遮罩碼 0x000fffffffffffffL 選定的位)表示浮點數的有效數字(有時也稱為尾數)。

如果參數是正無窮大,則結果為 0x7ff0000000000000L

如果參數是負無窮大,則結果為 0xfff0000000000000L

如果參數是 NaN,則結果為 0x7ff8000000000000L

在所有情況下,結果都是一個 long 整數,將其賦予 longBitsToDouble(long) 方法將產生一個與 doubleToLongBits 的參數相同的浮點值(所有 NaN 值被壓縮成一個“規範”NaN 值時除外)。

參數:
value - 精度 (double) 浮點數。
返回:
表示浮點數的位。

doubleToRawLongBits

public static long doubleToRawLongBits(double value)
根據 IEEE 754 浮點“雙精度格式”位佈局,返回指定浮點值的表示形式,並保留 NaN 值。

第 63 位(遮罩碼 0x8000000000000000L 選定的位)表示浮點數的符號。第 62-52 位(遮罩碼 0x7ff0000000000000L 選定的位)表示指數。第 51-0 位(遮罩碼 0x000fffffffffffffL 選定的位)表示浮點數的有效數字(有時也稱為尾數)。

如果參數是正無窮大,則結果為 0x7ff0000000000000L

如果參數是負無窮大,則結果為 0xfff0000000000000L

如果參數是 NaN,則結果是表示實際 NaN 值的 long 整數。與 doubleToLongBits 方法不同,doubleToRawLongBits 並沒有壓縮那些將 NaN 編碼為一個“規範的”NaN 值的所有位網要。

在所有情況下,結果都是一個 long 整數,將其賦予 longBitsToDouble(long) 方法將產生一個與 doubleToRawLongBits 的參數相同的浮點值。

參數:
value - 精度 (double) 浮點數。
返回:
表示浮點數的位。
從以下版本開始:
1.3

longBitsToDouble

public static double longBitsToDouble(long bits)
返回對應於給定位表示形式的 double 值。根據 IEEE 754 浮點“雙精度格式”位佈局,參數被視為浮點值表示形式。

如果參數是 0x7ff0000000000000L,則結果為正無窮大。

如果參數是 0xfff0000000000000L,則結果為負無窮大。

如果參數值在 0x7ff0000000000001L0x7fffffffffffffffL 之間或者在 0xfff0000000000001L0xffffffffffffffffL 之間,則結果為 NaN。Java 提供的任何 IEEE 754 浮點操作都不能區分具有不同位網要的兩個同型別 NaN 值。不同的 NaN 值只能使用 Double.doubleToRawLongBits 方法區分。

在所有其他情況下,設 sem 為可以通過以下參數計算的三個值:

 int s = ((bits >> 63) == 0) ? 1 : -1;
 int e = (int)((bits >> 52) & 0x7ffL);
 long m = (e == 0) ?
                 (bits & 0xfffffffffffffL) << 1 :
                 (bits & 0xfffffffffffffL) | 0x10000000000000L;
 
那麼浮點結果等於算術表達式 s·m·2e-1075 的值。

注意,此方法不能返回與 long 參數具有完全相同位網要的 double NaN。IEEE 754 區分了兩種 NaN:quiet NaN 和 signaling NaN。這兩種 NaN 之間的差別在 Java 中通常是不可見的。對 signaling NaN 進行的算術運算將它們轉換為具有不同(但通常類似)位網要的 quiet NaN。但是在某些處理器上,只複製 signaling NaN 也執行這種轉換。特別是在複製 signaling NaN 以將其返回給調用方法時,可能會執行這種轉換。因此,longBitsToDouble 可能無法返回具有 signaling NaN 位網要的 double 值。所以,對於某些 long 值,doubleToRawLongBits(longBitsToDouble(start)) 可能 等於 start。此外,儘管所有 NaN 位網要(不管是 quiet NaN 還是 signaling NaN)都必須在上面提到的 NaN 範圍內,但表示 signaling NaN 的特定位網要與平臺有關。

參數:
bits - 任意 long 整數。
返回:
具有相同位網要的 double 浮點值。

compareTo

public int compareTo(Double anotherDouble)
對兩個 Double 物件所表示的數值進行比較。在應用到基本 double 值時,有兩種方法可以比較執行此方法產生的值與執行 Java 語言數字比較運算符(<、<=、== 和 >= >)產生的值之間的區別: 這可以確保受此方法影響的 Double 物件的自然順序與 equals 一致

指定者:
介面 Comparable<Double> 中的 compareTo
參數:
anotherDouble - 要比較的 Double 值。
返回:
如果 anotherDouble 在數字上等於此 Double,則返回 0;如果此 Double 在數字上小於 anotherDouble,則返回小於 0 的值;如果此 Double 在數字上大於此 anotherDouble,則返回大於 0 的值。
從以下版本開始:
1.2

compare

public static int compare(double d1,
                          double d2)
比較兩個指定的 double 值。返回整數值的符號與以下調用返回的整數的符號相同:
    new Double(d1).compareTo(new Double(d2))
 

參數:
d1 - 要比較的第一個 double
d2 - 要比較的第二個 double
返回:
如果 d1 在數字上等於 d2,則返回 0;如果 d1 在數字上小於 d2,則返回小於 0 的值;如果 d1 在數字上大於d2,則返回大於 0 的值。
從以下版本開始:
1.4

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only