|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
java.lang.Object java.lang.Number java.lang.Double
public final class Double
Double
类在对象中包装了一个基本类型 double
的值。每个 Double
类型的对象都包含一个 double
类型的字段。
此外,该类还提供了多个方法,可以将 double
转换为 String
,将 String
转换为 double
,还提供了其他一些处理 double
时有用的常量和方法。
字段摘要 | |
---|---|
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
表示基本类型 double 的 Class 实例。 |
构造方法摘要 | |
---|---|
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 |
字段详细信息 |
---|
public static final double POSITIVE_INFINITY
double
类型的正无穷大的常量。它等于 Double.longBitsToDouble(0x7ff0000000000000L)
返回的值。
public static final double NEGATIVE_INFINITY
double
类型的负无穷大的常量。它等于 Double.longBitsToDouble(0xfff0000000000000L)
返回的值。
public static final double NaN
double
类型的非数字 (NaN) 值的常量。它等于 Double.longBitsToDouble(0x7ff8000000000000L)
返回的值。
public static final double MAX_VALUE
double
类型的最大正有限值的常量,最大正有限值为 (2-2-52)·21023。它等于十六进制的浮点字面值 0x1.fffffffffffffP+1023
,也等于 Double.longBitsToDouble(0x7fefffffffffffffL)
。
public static final double MIN_VALUE
double
类型数据的最小正非零值的常量,最小正非零值为 2-1074。它等于十六进制的浮点字面值 0x0.0000000000001P-1022
,也等于 Double.longBitsToDouble(0x1L)
。
public static final int SIZE
public static final Class<Double> TYPE
double
的 Class
实例。
构造方法详细信息 |
---|
public Double(double value)
Double
对象,它表示基本的 double
参数。
value
- 用 Double
表示的值。public Double(String s) throws NumberFormatException
Double
对象,表示用字符串表示的 double
类型的浮点值。该方法与 valueOf
方法类似,可将字符串转换为 double
值。
s
- 要转换为 Double
的字符串。
NumberFormatException
- 如果字符串不包含可分析的数字。valueOf(java.lang.String)
方法详细信息 |
---|
public static String toString(double d)
double
参数的字符串表示形式。下面提到的所有字符都是 ASCII 字符。
NaN
"。
-
' ('\u002D'
);如果符号为正,则结果中不显示符号字符。至于大小值 m:
"Infinity"
表示它;因此,正无穷大产生的结果就是 "Infinity"
,而负无穷大产生的结果是 "-Infinity"
。
"0.0"
表示它;因此,负零产生的结果是 "-0.0"
,而正零产生的结果是 "0.0"
。
.
' ('\u002E'
),再后面是表示 m 的小数部分的一个或多个十进制位数。
.
' ('_apos;
),接着是表示 a 的小数部分的十进制位数,再后面是字母 'E
' ('-pos;
),最后是用十进制整数形式表示的 n,这与通过方法 Integer.toString(int)
产生的结果非常相似。
double
类型的邻近值。换句话说,假设 x 是用十进制表示法表示的精确算术值,是通过用于有限非零参数 d 的方法生成的。那么 d 必须是最接近 x 的 double
值;如果两个 double
值都同样接近 x,那么 d 必须是其中之一,并且 d 的最低有效位必须是 0
。
使用 NumberFormat
的子类创建浮点值的本地化字符串表示形式。
d
- 要转换的 double
值。
public static String toHexString(double d)
double
参数的十六进制字符串表示形式。下面提到的所有字符都是 ASCII 字符。
NaN
"。
-
' ('\u002D'
);如果符号为正,则结果中不显示符号字符。至于大小值 m:
"Infinity"
表示它;因此,正无穷大产生的结果就是 "Infinity"
,而负无穷大产生的结果是 "-Infinity"
。
"0x0.0p0"
表示它;因此,负零产生的结果就是 "-0x0.0p0"
,而正零产生的结果是 "0x0.0p0"
。
double
值,则子串用来表示有效位数和指数字段。有效位数是用字符串 "0x1."
表示的,后面跟着该有效位数小数部分的小写的十六进制表示形式。除非所有位数为零,否则移除十六进制表示中的尾部零,在所有位数为零的情况下,可以使用一个零表示。其次,指数是用 "p"
表示的,后面跟着无偏指数的十进制字符串,该值与对指数值调用 Integer.toString
所产生的值相同。
double
值,则用字符 "0x0."
表示有效位数,后面跟着该有效位数小数部分的十六进制表示。移除十六进制表示形式中的尾部零。然后用 "p-1022"
表示指数。注意,在低正常有效位数中,至少必须有一个非零位数。
浮点值 | 十六进制字符串 |
---|---|
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
值。
public static Double valueOf(String s) throws NumberFormatException
s
表示的 double
值的 Double
对象。
如果 s
为 null
,那么抛出 NullPointerException
异常。
忽略 s
中的前导空白字符和尾部空白字符。就像调用 String.trim()
方法那样移除空白;换句话说,ASCII 空格和控制字符都要移除。s
的其余部分应该构成一个与词法语法规则的描述相同的 FloatValue:
其中,Sign、FloatingPointLiteral、HexNumeral、HexDigits、SignedInteger 和 FloatTypeSuffix 与《Java Language Specification》的词法结构部分中定义的相同。如果
- FloatValue:
- Signopt
NaN
- Signopt
Infinity
- Signopt FloatingPointLiteral
- Signopt HexFloatingPointLiteral
- SignedInteger
- HexFloatingPointLiteral:
- HexSignificand BinaryExponent FloatTypeSuffixopt
- HexSignificand:
- HexNumeral
- HexNumeral
.
0x
HexDigitsopt.
HexDigits0X
HexDigitsopt.
HexDigits
- BinaryExponent:
- BinaryExponentIndicator SignedInteger
- BinaryExponentIndicator:
p
P
s
的表示形式不是 FloatValue,则抛出 NumberFormatException
异常。否则,可以认为 s
表示的是常碰到的“计算机科学记数法”中的精确的十进制值,或者是一个精确的十六进制值;在理论上,这个精确的数值被转换一个“无限精确的”二进制值,然后根据常用的 IEEE 754 浮点算术的“舍入成最接近的数”规则对 double
类型的值进行舍入计算,其中包括保留零值的符号。最后,返回表示此 double
值的 Double
对象。
使用 NumberFormat
的子类来解释浮点值的本地化字符串表示形式。
注意尾部格式说明符,确定浮点字面值(1.0f
是一个 float
值;1.0d
是一个 double
值)的类型的说明符不会 影响此方法的结果。换句话说,输入字符串的数值被直接转换为目标浮点类型。转换先后分两步,先将字符串转换为 float
,然后将 float
转换为 double
,这种转换不 同于直接将字符串转换为 double
。例如,float
文本 0.1f
等于 double
值 0.10000000149011612
;float
文本 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
- 如果字符串不包含可分析的数字。public static Double valueOf(double d)
Double(double)
,因为该方法很可能通过缓存经常请求的值来显著提高空间和时间性能。
d
- 一个 double 值。
public static double parseDouble(String s) throws NumberFormatException
double
值,该值被初始化为用指定 String
表示的值,这与 Double
类的 valueOf
方法产生的值类似。
s
- 要分析的字符串。
double
值。
NumberFormatException
- 如果该字符串不包含可分析的 double
值。valueOf(String)
public static boolean isNaN(double v)
true
;否则,返回 false
。
v
- 要测试的值。
true
;否则,返回 false
。public static boolean isInfinite(double v)
true
;否则,返回 false
。
v
- 要测试的值。
true
;否则,返回 false
。public boolean isNaN()
Double
值是非数字(NaN)值,则返回 true
;否则,返回 false
。
true
;否则返回 false
。public boolean isInfinite()
Double
值的大小是无穷大,则返回 true
;否则返回 false
。
true
;否则返回 false
。public String toString()
Double
对象的字符串表示形式。使用此对象表示的基本 double
值被转换为一个字符串,该方法与带有一个参数的 toString
方法非常类似。
String
表示形式。toString(double)
public byte byteValue()
Double
值作为 byte
返回(通过强制转换为 byte
)。
double
值,该值被转换为 byte
类型public short shortValue()
Double
值作为 short
返回(通过强制转换为 short
)。
Number
中的 shortValue
double
值,该值被转换为 short
类型public int intValue()
public long longValue()
Double
值作为 long
类型返回(通过强制转换为 long
类型)。
double
值,该值被转换为 long
类型public float floatValue()
Double
对象的 float
值。
Number
中的 floatValue
double
值,该值被转换为 float
类型public double doubleValue()
Double
对象的 double
值。
Number
中的 doubleValue
double
值public int hashCode()
Double
对象的哈希码。结果是 long
整数位表示形式的两部分的异或 (XOR),这与此 Double
对象的基本 double
值的 doubleToLongBits(double)
方法所产生的结果完全一致。也就是说,哈希码就是以下表达式的值:
其中(int)(v^(v>>>32))
v
的定义为:
long v = Double.doubleToLongBits(this.doubleValue());
hash code
值。Object.equals(java.lang.Object)
,
Hashtable
public boolean equals(Object obj)
null
而是 Double
对象,且表示的 Double
值与该对象所表示的 double
值相同时,结果为 true
。为此,当且仅当将方法 doubleToLongBits(double)
应用于两个值所返回的 long
值相同时,才认为两个 double
值相同。
注意,在大多数情况下,对于 Double
类的两个实例 d1
和 d2
,当且仅当
d1.doubleValue() == d2.doubleValue()
并且值也为 true
时,d1.equals(d2)
的值才为 true
。但是也有下列两个例外:
d1
和 d2
都表示 Double.NaN
,那么 equals
方法返回 true
,即使 Double.NaN==Double.NaN
值为 false
。
d1
表示 +0.0
而 d2
表示 -0.0
,或者反之,则 equal
测试值为 false
,即使 +0.0==-0.0
值为 true
。
obj
- 要与之进行比较的对象。
true
;否则返回 false
。doubleToLongBits(double)
public static long doubleToLongBits(double value)
第 63 位(掩码 0x8000000000000000L
选定的位)表示浮点数字的符号。第 62-52 位(掩码 0x7ff0000000000000L
选定的位)表示指数。第 51-0 位(掩码 0x000fffffffffffffL
选定的位)表示浮点数字的有效位数(有时也称为尾数)。
如果参数是正无穷大,则结果是 0x7ff0000000000000L
。
如果结果是负无穷大,则结果是 0xfff0000000000000L
。
如果参数是 NaN,则结果是 0x7ff8000000000000L
。
在所有情况下,结果都是一个 long
整数,在将其赋予 longBitsToDouble(long)
方法时,将生成一个与 doubleToLongBits
的参数相同的浮点值(除所有 NaN 值被压缩成一个“规范的”NaN 值之外)。
value
- double
精度浮点数。
public static long doubleToRawLongBits(double value)
第 63 位(掩码 0x8000000000000000L
选定的位)表示浮点数字的符号。第 62-52 位(掩码 0x7ff0000000000000L
选定的位)表示指数。第 51-0 位(掩码 0x000fffffffffffffL
选定的位)表示浮点数字的有效位数(有时也称为尾数)。
如果参数是正无穷大,则结果是 0x7ff0000000000000L
。
如果结果是负无穷大,则结果是 0xfff0000000000000L
。
如果参数为 NaN,则结果是表示实际 NaN 值的 long
整数。与 doubleToLongBits
方法不同,doubleToRawLongBits
并没有压缩那些将 NaN 编码为一个“规范的”NaN 值的所有位模式。
在所有情况下,结果都是一个 long
整数,在将其赋予 longBitsToDouble(long)
方法时,将生成一个与 doubleToRawLongBits
的参数相同的浮点值。
value
- double
精度浮点数。
public static double longBitsToDouble(long bits)
double
值。参数是符合 IEEE 754 的浮点“双精度形式”中的位布局规定的浮点值表示形式。
如果参数是 0x7ff0000000000000L
,则结果是正无穷大。
如果参数是 0xfff0000000000000L
,则结果是负无穷大。
如果参数在 0x7ff0000000000001L
到 0x7fffffffffffffffL
或在 0xfff0000000000001L
到 0xffffffffffffffffL
之间,则结果是 NaN。Java 提供的非 IEEE 754 浮点操作可以在具有不同位模式的同一类型的两个 NaN 值之间进行区分。不同的 NaN 值只能使用 Double.doubleToRawLongBits
方法进行区分。
在其他所有情况下,允许 s、e 和 m 成为可以通过以下参数计算的三个值;
浮点结果等于算术表达式 s·m·2e-1075 的值。int s = ((bits >> 63) == 0) ? 1 : -1; int e = (int)((bits >> 52) & 0x7ffL); long m = (e == 0) ? (bits & 0xfffffffffffffL) << 1 : (bits & 0xfffffffffffffL) | 0x10000000000000L;
注意,这个方法不能返回具有与 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
浮点值。public int compareTo(Double anotherDouble)
Double
对象。在应用到基本 double
值时,有两种方法可以比较执行此方法产生的值与执行 Java 语言的数字比较运算符(<、<=、== 和 >= >
)产生的值之间的区别:
Double.NaN
等于它自身,且大于其他所有 double
值(包括 Double.POSITIVE_INFINITY
)。
0.0d
大于 -0.0d
。
Comparable<Double>
中的 compareTo
anotherDouble
- 要比较的 Double
值。
anotherDouble
在数字上等同于此 Double
,则返回 0
;如果 Double
在数字上小于此 anotherDouble
,则返回小于 0
的值;如果 Double
在数字上大于此 anotherDouble
,则返回大于 0
的值。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
的值。
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
上一个类 下一个类 | 框架 无框架 | |||||||||
摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 |
版权所有 2004 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。