JavaTM 2 Platform
Standard Ed. 5.0

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 double MAX_VALUE
          保持 double 类型的最大正有限值的常量,最大正有限值为 (2-2-52)·21023
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()
          将此 Double 值作为 byte 返回(通过强制转换为 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()
          将此 Double 值作为 int 类型返回(通过强制转换为 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()
          将此 Double 值作为 long 类型返回(通过强制转换为 long 类型)。
static double parseDouble(String s)
          返回一个新的 double 值,该值被初始化为用指定 String 表示的值,这与 Double 类的 valueOf 方法产生的值类似。
 short shortValue()
          将此 Double 值作为 short 返回(通过强制转换为 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_VALUE

public static final double MIN_VALUE
保持 double 类型数据的最小正非零值的常量,最小正非零值为 2-1074。它等于十六进制的浮点字面值 0x0.0000000000001P-1022,也等于 Double.longBitsToDouble(0x1L)

另请参见:
常量字段值

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 是用十进制表示法表示的精确算术值,是通过用于有限非零参数 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
其中,SignFloatingPointLiteralHexNumeralHexDigitsSignedIntegerFloatTypeSuffix 与《Java Language Specification》的词法结构部分中定义的相同。如果 s 的表示形式不是 FloatValue,则抛出 NumberFormatException 异常。否则,可以认为 s 表示的是常碰到的“计算机科学记数法”中的精确的十进制值,或者是一个精确的十六进制值;在理论上,这个精确的数值被转换一个“无限精确的”二进制值,然后根据常用的 IEEE 754 浮点算术的“舍入成最接近的数”规则对 double 类型的值进行舍入计算,其中包括保留零值的符号。最后,返回表示此 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()
将此 Double 值作为 byte 返回(通过强制转换为 byte)。

覆盖:
Number 中的 byteValue
返回:
此对象表示的 double 值,该值被转换为 byte 类型
从以下版本开始:
JDK1.1

shortValue

public short shortValue()
将此 Double 值作为 short 返回(通过强制转换为 short)。

覆盖:
Number 中的 shortValue
返回:
此对象表示的 double 值,该值被转换为 short 类型
从以下版本开始:
JDK1.1

intValue

public int intValue()
将此 Double 值作为 int 类型返回(通过强制转换为 int)。

指定者:
Number 中的 intValue
返回:
此对象表示的 double 值,该值被转换为 int 类型

longValue

public long longValue()
将此 Double 值作为 long 类型返回(通过强制转换为 long 类型)。

指定者:
Number 中的 longValue
返回:
此对象表示的 double 值,该值被转换为 long 类型

floatValue

public float floatValue()
返回此 Double 对象的 float 值。

指定者:
Number 中的 floatValue
返回:
此对象表示的 double 值,该值被转换为 float 类型
从以下版本开始:
JDK1.0

doubleValue

public double doubleValue()
返回此 Double 对象的 double 值。

指定者:
Number 中的 doubleValue
返回:
此对象表示的 double

hashCode

public int hashCode()
返回此 Double 对象的哈希码。结果是 long 整数位表示形式的两部分的异或 (XOR),这与此 Double 对象的基本 double 值的 doubleToLongBits(double) 方法所产生的结果完全一致。也就是说,哈希码就是以下表达式的值:
 (int)(v^(v>>>32))
 
其中 v 的定义为:
 long v = Double.doubleToLongBits(this.doubleValue());
 

覆盖:
Object 中的 hashCode
返回:
此对象的 hash code 值。
另请参见:
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 精度浮点数。
返回:
表示浮点数的数位。

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 的值。

注意,这个方法不能返回具有与 double 参数完全相同的位模式的 long 类型的 NaN 值。IEEE 754 对静默 NaN 和信号 NaN 这两种 NaN 进行了区分。这两种 NaN 之间的差别在 Java 中通常是不可见的。信号 NaN 上的算术运算将它们转换为带有一个有些不同但非常类似的位模式的静默 NaN。但在某些只复制信号 NaN 的处理器上也执行这种转换。特别是在复制信号 NaN,以便将其返回给调用方法的时候,可能会执行这种转换。因此,longBitsToDouble 可能无法返回具有信号 NaN 位模式的 double 值。因此,对于一些 long 值来说,doubleToRawLongBits(longBitsToDouble(start)) 可能 等于 start。此外,尽管所有 NaN 位模式,不管是静默 NaN 还是信号 NaN,都必须在上面确定的 NaN 范围内,但特定位模式表示信号 NaN 是与平台有关的。

参数:
bits - 任意 long 整数。
返回:
具有相同位模式的 double 浮点值。

compareTo

public int compareTo(Double anotherDouble)
从数字上比较两个 Double 对象。在应用到基本 double 值时,有两种方法可以比较执行此方法产生的值与执行 Java 语言的数字比较运算符(<、<=、== 和 >= >)产生的值之间的区别: 这可以确保受此方法影响的 Double 对象的自然顺序与等号一致 的。

指定者:
接口 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. 5.0

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java 2 SDK SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策