java.lang.Object java.lang.Number java.lang.Double
public final class Double
Double
类在对象中包装一个基本类型 double
的值。每个 Double
类型的对象都包含一个 double
类型的字段。
此外,该类还提供多个方法,可以将 double
转换为 String
,将 String
转换为 double
,也提供了其他一些处理 double
时有用的常量和方法。
字段摘要 | |
---|---|
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 表示基本类型 double 的 Class 实例。 |
构造方法摘要 | |
---|---|
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 |
字段详细信息 |
---|
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)·2
1023。它等于十六进制的浮点字面值
0x1.fffffffffffffP+1023
,也等于
Double.longBitsToDouble(0x7fefffffffffffffL)
。
public static final double MIN_NORMAL
double
类型的最小正标准值的常量,最小正标准值为 2
-1022。它等于十六进制的浮点字面值
0x1.0p-1022
,也等于
Double.longBitsToDouble(0x0010000000000000L)
。
public static final double MIN_VALUE
double
类型的最小正非零值的常量,最小正非零值为 2
-1074。它等于十六进制的浮点字面值
0x0.0000000000001P-1022
,也等于
Double.longBitsToDouble(0x1L)
。
public static final int MAX_EXPONENT
double
变量可能具有的最大指数。它等于
Math.getExponent(Double.MAX_VALUE)
返回的值。
public static final int MIN_EXPONENT
double
变量可能具有的最小指数。它等于
Math.getExponent(Double.MIN_NORMAL)
返回的值。
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 生成结果 "0.0"
。 .
' ('\u002E'
),再后面是表示 m 小数部分的一个或多个十进制数字。 .
' ('\u002E'
),接着是表示 a 小数部分的十进制数字,再后面是字母 'E
' ('\u0045'
),最后是用十进制整数形式表示的 n,这与方法 Integer.toString(int)
生成的结果一样。 double
类型的邻近值。这就是说,假设
x 是用十进制表示法表示的精确算术值,是通过对有限非 0 参数
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"
表示;因此,负 0 生成结果 "-0x0.0p0"
,正 0 生成结果 "0x0.0p0"
。 double
值,则使用子字符串表示有效数字和指数字段。有效数字用字符 "0x1."
表示,后跟该有效数字剩余小数部分的小写十六进制表示形式。除非所有位数都为 0,否则移除十六进制表示中的尾部 0,在所有位数都为零的情况下,可以用一个 0 表示。接下来用 "p"
表示指数,后跟无偏指数的十进制字符串,该值与通过对指数值调用 Integer.toString
生成的值相同。 double
值,则用字符 "0x0."
表示有效数字,后跟该有效数字剩余小数部分的十六进制表示形式。移除十六进制表示中的尾部 0。然后用 "p-1022"
表示指数。注意,在非标准有效数字中,必须至少有一个非 0 数字。 浮点值 | 十六进制字符串 |
---|---|
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
类型,其中包括保留 0 值的符号。最后,返回表示此
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()
byte
形式返回此
Double
的值(通过强制转换为
byte
)。
byte
类型的由此对象所表示的
double
值
public short shortValue()
short
形式返回此
Double
的值(通过强制转换为
short
)。
Number
中的
shortValue
short
类型的由此对象所表示的
double
值
public int intValue()
public long longValue()
long
形式返回此
Double
的值(通过强制转换为
long
类型)。
long
类型的由此对象所表示的
double
值
public float floatValue()
Double
对象的
float
值。
Number
中的
floatValue
float
类型的由此对象所表示的
double
值
public double doubleValue()
Double
对象的
double
值。
Number
中的
doubleValue
double
值
public int hashCode()
Double
对象的哈希码。结果是此
Double
对象所表示的基本
double
值的
long
整数位表示形式(与
doubleToLongBits(double)
方法生成的结果完全一样)两部分整数之间的异或 (XOR)。也就是说,哈希码就是以下表达式的值:
其中(int)(v^(v>>>32))
v
的定义为:
long v = Double.doubleToLongBits(this.doubleValue());
hashCode
值。
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
,那么即使 Double.NaN==Double.NaN
值为 false
,equals
方法也将返回 true
。 d1
表示 +0.0
而 d2
表示 -0.0
,或者相反,那么即使 +0.0==-0.0
值为 true
,equals
测试也将返回 false
。
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·2 e-1075 的值。int s = ((bits >> 63) == 0) ? 1 : -1; int e = (int)((bits >> 52) & 0x7ffL); long m = (e == 0) ? (bits & 0xfffffffffffffL) << 1 : (bits & 0xfffffffffffffL) | 0x10000000000000L;
注意,此方法不能返回与 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
浮点值。
public int compareTo(