public final class Double extends Number implements Comparable<Double>
Double
类包装一个对象中的原始类型double
的值。
类型为Double
的对象包含一个单一字段,其类型为double
。
此外,该类还提供了几种将double
转换为String
和String
转换为double
,以及在处理double
时有用的其他常数和方法。
Modifier and Type | Field and Description |
---|---|
static int |
BYTES
用于表示
double 值的字节数。
|
static int |
MAX_EXPONENT
最大指数有限的
double 变量可能有。
|
static double |
MAX_VALUE
的常量保持型的最大正的有限值
double ,(2-2
-52)A·2
1023。
|
static int |
MIN_EXPONENT
最小指数归一化
double 变量可能有。
|
static double |
MIN_NORMAL
恒定持有
double 类型的最小正正常值,2
-1022 。
|
static double |
MIN_VALUE
一个常数保持最小的正非零值类型
double
-1074 。
|
static double |
NaN
一个常数,持有
double 类型的非数字(NaN)值。
|
static double |
NEGATIVE_INFINITY
持有
double 类型的负无穷大的
double 。
|
static double |
POSITIVE_INFINITY
恒定持有
double 型的正无穷大。
|
static int |
SIZE
用于表示
double 值的位数。
|
static 类<Double> |
TYPE
类 原始类型
double 的
类 实例。
|
Constructor and Description |
---|
Double(double value)
构造一个新分配的
Double 对象,表示原始
double 参数。
|
Double(String s)
构造一个新分配
Double 对象,它表示类型的浮点值
double 用字符串表示。
|
Modifier and Type | Method and Description |
---|---|
byte |
byteValue()
返回此值
Double 为
byte 的基本收缩转换后。
|
static int |
compare(double d1, double d2)
比较两个指定的
double 值。
|
int |
compareTo(Double anotherDouble)
数字比较两个
Double 对象。
|
static long |
doubleToLongBits(double value)
根据IEEE 754浮点“双格式”位布局返回指定浮点值的表示。
|
static long |
doubleToRawLongBits(double value)
根据IEEE 754浮点“双格式”位布局返回指定浮点值的表示,保留非数字(NaN)值。
|
double |
doubleValue()
返回此
Double 对象的
double 值。
|
boolean |
equals(Object obj)
将此对象与指定对象进行比较。
|
float |
floatValue()
返回此值
Double 为
float 的基本收缩转换后。
|
int |
hashCode()
返回此
Double 对象的哈希码。
|
static int |
hashCode(double value)
返回一个 double 值的哈希码;
兼容Double.hashCode() 。
|
int |
intValue()
在
int 后,返回
Double 作为int的值。
|
static boolean |
isFinite(double d)
如果参数是有限浮点值,则返回 true ;
返回false (对于NaN和无穷大参数)。
|
boolean |
isInfinite()
返回
true 如果这
Double 值是无限大,
false 其他。
|
static boolean |
isInfinite(double v)
返回
true 如果指定的数量是无限大,
false 其他。
|
boolean |
isNaN()
如果
Double 值
Double 数字(NaN),则返回
true ,
false false。
|
static boolean |
isNaN(double v)
如果指定的数字是非数字(NaN)值,则返回
true ,
false false。
|
static double |
longBitsToDouble(long bits)
返回与给
double 表示相对应的
double 值。
|
long |
longValue()
返回此值
Double 为
long 的基本收缩转换后。
|
static double |
max(double a, double b)
返回两个
double 值中的较大值,就像调用
Math.max 一样 。
|
static double |
min(double a, double b)
返回两个
double 的较小值,就像调用
Math.min 一样 。
|
static double |
parseDouble(String s)
返回一个新
double 初始化为指定的代表的值
String ,如通过执行
valueOf 类的方法
Double 。
|
short |
shortValue()
返回此值
Double 为
short 的基本收缩转换后。
|
static double |
sum(double a, double b)
按照+运算符将两个
double 值一起添加。
|
static String |
toHexString(double d)
返回
double 参数的十六进制字符串
double 形式。
|
String |
toString()
返回此
Double 对象的字符串表示形式。
|
static String |
toString(double d)
返回
double 参数的字符串
double 形式。
|
static Double |
valueOf(double d)
返回一个
Double
double 值的
Double 实例。
|
static Double |
valueOf(String s)
返回一个
Double 对象,保存由参数字符串
s 的
double 值。
|
public static final double POSITIVE_INFINITY
double
型的正无穷大。
它等于Double.longBitsToDouble(0x7ff0000000000000L)
返回的值。
public static final double NEGATIVE_INFINITY
double
类型的负无穷大的double
。
它等于Double.longBitsToDouble(0xfff0000000000000L)
返回的值。
public static final double NaN
double
类型的非数字(NaN)值。
它相当于返回的值Double.longBitsToDouble(0x7ff8000000000000L)
。
public static final double MAX_VALUE
double
,(2-2 -52)A·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
-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
double
值的位数。
public static final int BYTES
double
值的字节数。
public Double(double value)
Double
对象,代表原始的
double
参数。
value
-值由表示
Double
。
public Double(String s) throws NumberFormatException
Double
对象,该对象表示由字符串表示的类型double
的浮点值。
该字符串被转换为一个double
值如果由valueOf
方法。
s
-一个字符串被转换为
Double
。
NumberFormatException
- 如果字符串不包含可解析的数字。
valueOf(java.lang.String)
public static String toString(double d)
double
参数的字符串double
形式。
下面提到的所有字符都是ASCII字符。
NaN
”。 -
'( '\u002D'
); 如果符号为正,则结果中不会出现任何符号字符。 至于幅度m :
"Infinity"
; 因此,正无穷大产生结果"Infinity"
和负无穷大产生结果"-Infinity"
。 "0.0"
; 因此,负零产生结果"-0.0"
,正零产生结果"0.0"
。 .
”( '\u002E'
),后跟一个或多个表示m的小数部分十进制数字。 .
”( '\u002E'
),再后面是表示一个小数部分十进制数字,后面跟有字母“ E
”( '\u0045'
),接着为十进制整数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
参数的十六进制字符串double
形式。
下面提到的所有字符都是ASCII字符。
NaN
”。 -
'( '\u002D'
); 如果符号为正,则结果中不会出现任何符号字符。 至于幅度m :
"Infinity"
; 因此,正无穷大产生结果"Infinity"
和负无穷大产生结果"-Infinity"
。 "0x0.0p0"
; 因此,负零产生结果"-0x0.0p0"
,正零产生结果"0x0.0p0"
。 double
一化表示的double
值,则使用子字符串来表示有效位数和指数字段。 有效数字由字符"0x1." "0x1."
后面是有意义数据的其余部分的小写十六进制表示形式作为分数。 删除十六进制表示中的尾随零,除非所有数字都为零,在这种情况下使用单个零。 接下来,指数由"p"
后跟无偏差指数的十进制字符串,就好像通过对指数值调用Integer.toString
产生的那样 。 double
表示的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
Double
对象,保存由参数字符串s
的double
值。
如果s
是null
,那么抛出一个NullPointerException
。
s中的前导和尾随空格s
将被忽略。 空格被删除,好像通过String.trim()
方法; 也就是说,ASCII空间和控制字符都被删除。 s
的其余部分应构成FloatValue ,如词法语法规则所述:
其中Sign , FloatingPointLiteral , HexNumeral , HexDigits , SignedInteger和FloatTypeSuffix都在The 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
被认为是在通常的“计算机科学符号”中表示精确的十进制值,或者作为确切的十六进制值;
此确切数值然后被概念性地转换为一个“无限精确的”二进制值,然后将其倒圆的键入double
由IEEE 754浮点运算,其包括保留0值的符号的通常舍入到最近的规则。
注意,round-to-nearest规则也意味着溢出和下溢行为;
如果s
的确切值足够大(大于或等于( MAX_VALUE
+ ulp(MAX_VALUE)
/2 )),则舍入到double
将导致无穷大,如果s
的确切值足够小(小于或等于到MIN_VALUE
/2 ),四舍五入将导致零。最后,在舍入后,返回一个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 // signed decimal integer. 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 section 3.10.2 of // The Java Language Specification. // 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
- 要解析的字符串。
Double
对象持有由
String
参数表示的值。
NumberFormatException
- 如果字符串不包含可解析的数字。
public static Double valueOf(double d)
Double
double
值的Double
实例。
如果不需要新的Double
实例,则该方法通常优先于构造函数Double(double)
使用 ,因为该方法可能通过缓存经常请求的值而产生明显更好的空间和时间性能。
d
- 一个双重值。
Double
实例,代表
d
。
public static double parseDouble(String s) throws NumberFormatException
double
,由Double的
valueOf
方法
String
,初始化为由指定的
valueOf
的
Double
。
s
- 要解析的字符串。
double
值由字符串参数表示。
NullPointerException
- 如果字符串为空
NumberFormatException
- 如果字符串不包含可解析的
double
。
valueOf(String)
public static boolean isNaN(double v)
true
,
false
false。
v
- 要测试的值。
true
如果参数的值是NaN;
false
否则。
public static boolean isInfinite(double v)
true
如果指定的数量是无限大,
false
其他。
v
- 要测试的值。
true
如果参数的值是正无穷大或负无穷大;
false
否则。
public static boolean isFinite(double d)
true
;
返回false
(对于NaN和无穷大参数)。
d
- 要测试的
double
值
true
如果参数是一个有限浮点值,
false
否则。
public boolean isNaN()
true
如果这
Double
值是不是非数字(NAN),
false
其他。
true
如果该对象表示的值为NaN;
false
否则。
public boolean isInfinite()
true
如果这个
Double
数值无限大,
false
false。
true
如果该对象表示的值是正无穷大或负无穷大;
false
否则。
public String toString()
Double
对象的字符串表示形式。
由该对象表示的double
值double转换为一个字符串,如同一个参数的方法toString
。
toString
在类别
Object
String
表示的这个对象。
toString(double)
public byte byteValue()
Double
为
byte
的基本收缩转换后。
public short shortValue()
Double
为
short
的基本收缩转换后。
shortValue
在类别
Number
double
值转换为
short
public int intValue()
Double
作为
int
的基本收缩转换之后。
public long longValue()
Double
为
long
的基本收缩转换后。
public float floatValue()
Double
为
float
的基本收缩转换后。
floatValue
在类别
Number
double
该对象表示值转换为类型
float
public double doubleValue()
Double
对象的
double
值。
doubleValue
在类别
Number
double
由此对象
double
值
public int hashCode()
Double
对象的哈希码。
结果是long
整数位表示的两半的异或,正如由方法doubleToLongBits(double)
所产生的,由这个Double
对象表示的原始double
值。
也就是说,哈希码是表达式的值:
(int)(v^(v>>>32))
其中v
由以下定义:
long v = Double.doubleToLongBits(this.doubleValue());
hashCode
在类别
Object
hash code
这个对象的值。
Object.equals(java.lang.Object)
,
System.identityHashCode(java.lang.Object)
public static int hashCode(double value)
double
值的哈希码;
兼容Double.hashCode()
。
value
- 哈希值
double
值。
public boolean equals(Object obj)
true
当且仅当该参数不是null
并且是Double
对象,它表示一个double
具有相同的值作为double
该对象表示。
为此,当且仅当方法doubleToLongBits(double)
在应用于每个时返回相同的long
值时,两个double
值被认为是相同的。
请注意,在大多数情况下,类的两个实例Double
, d1
和d2
,值d1.equals(d2)
是true
当且仅当
d1.doubleValue() == d2.doubleValue()
也有值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
。 equals
在类别
Object
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
表示相对应的double
值。
该参数被认为是根据IEEE 754浮点“双格式”位布局的浮点值的表示。
如果参数是0x7ff0000000000000L
,结果是正无穷大。
如果参数为0xfff0000000000000L
,结果为负无穷大。
如果参数在上述范围内的任何值0x7ff0000000000001L
通过0x7fffffffffffffffL
,或在范围0xfff0000000000001L
通过0xffffffffffffffffL
,其结果是NaN。 Java提供的IEEE 754浮点运算不能用不同的位模式区分同一类型的两个NaN值。 NaN的不同值只能通过使用Double.doubleToRawLongBits
方法进行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,安静的NaN和信号NaN 。 两种NaN之间的区别通常在Java中不可见。 信号NaN的算术运算将它们变成具有不同但通常相似的位模式的安静的NaN。 然而,在某些处理器上,仅仅复制信号NaN也执行该转换。 特别地,复制信令NaN以将其返回到调用方法可以执行该转换。 所以longBitsToDouble
可能无法返回一个double
具有signaling NaN的位模式。 因此,对于一些long
值, doubleToRawLongBits(longBitsToDouble(start))
可能不等于start
。 此外,哪些特定位模式表示信令NaN是平台依赖的; 尽管所有NaN位模式,安静或信令都必须位于上面确定的NaN范围内。
bits
- 任何
long
整数。
double
具有相同位模式的浮点值。
public int compareTo(Double anotherDouble)
Double
对象。
当应用于原始double
值时,通过此方法进行比较的方式与Java语言数值比较运算符( <, <=, ==, >=, >
)执行的比较有两种double
:
Double.NaN
被认为是等于本身并且大于所有其他double
值(包括Double.POSITIVE_INFINITY
)。 0.0d
被认为是大于-0.0d
。 Double
对象的自然排序 与equals一致 。
compareTo
在界面
Comparable<Double>
anotherDouble
- 要比较的
Double
。
0
如果anotherDouble
在数字上等于这个Double
;
一个值小于0
如果这个Double
在数字上小于anotherDouble
;
如果这个Double
大于0
那么这个值大于anotherDouble
。
public static int compare(double d1, double d2)
double
值。
返回的整数值的符号与调用返回的整数的符号相同:
new Double(d1).compareTo(new Double(d2))
d1
- 第一个
double
进行比较
d2
- 第二个
double
进行比较
0
如果d1
在数字上等于d2
;
的值小于0
如果d1
在数值上小于d2
;
如果d1
在数值上大于0
则值大于d2
。
public static double sum(double a, double b)
double
值一起添加。
a
- 第一个操作数
b
- 第二个操作数
a
和
b
BinaryOperator
public static double max(double a, double b)
double
的较大值,就像调用
Math.max
一样 。
a
- 第一个操作数
b
- 第二个操作数
a
和
b
BinaryOperator
public static double min(double a, double b)
double
的较小值,就像调用
Math.min
一样 。
a
- 第一个操作数
b
- 第二个操作数
a
和
b
。
BinaryOperator