换句话说,就是平等:
Double.parseDouble(Double.toString(x)) == x
由Java提供担保?
(编辑为使用parseDouble
以避免不必要的装箱.)
换句话说,就是平等:
Double.parseDouble(Double.toString(x)) == x
由Java提供担保?
(编辑为使用parseDouble
以避免不必要的装箱.)
是的,是这样的.如果你看一下documentation of toString
,在描述了特殊值的边缘情况后,有这样的文字
Selection of a decimal: Select 定义明确的十进制dSUB>m来表示m [absolute value of the 100 argument].根据IEEE 754浮点算术的四舍五入策略,该小数(几乎总是)舍入为m的最短小数.
Formatting as a string:小数dm根据其值被设置为字符串的格式,可以是普通的,也可以是计算机化的科学记数法.
换句话说,转换不会以十进制形式给出二进制浮点数的exact表示形式.但是,它将为结果提供足够的位数,以便将结果舍入到输入(使用IEEE 754标准的舍入到最接近的舍入).toString
实现还将try Select 满足此条件的最短可能形式.
另请参见documentation of valueOf
方法(它是parseDouble
的同义词).在这里,您可以确认各种特殊情况之间的对应关系,并使用四舍五入法进行反向转换.
EDIT:超过reading.
EDIT2:正如@teapot418注意到的那样,从技术上讲,NaN
的情况打破了平等.然而,这是因为标准对NaN
个比较的定义.如果你的x
是NaN
,Double.parseDouble(Double.toString(x))
仍然是NaN
.