Java Double.parseDouble()和String.valueOf()的精度

Java Double.parseDouble()和String.valueOf()的精度,java,parsing,double-precision,Java,Parsing,Double Precision,除了NaN,以下语句是否适用于任何double(Java原语双精度IEEE-754): Double.parseDouble(String.valueOf(d)) == d 否则,解析序列化(使用String.valueOf()的)双精度值是否总是生成准确的原始双精度值?除了NaN之外,正如您所说,是的,该不变量应该保持不变。如果不是,那就是JDK的错误 Double.toString在其Javadoc中这样说: m或a的小数部分必须打印多少位?必须至少有一个数字来表示小数部分,除此之外,还必

除了
NaN
,以下语句是否适用于任何
double
(Java原语双精度IEEE-754):

Double.parseDouble(String.valueOf(d)) == d

否则,解析序列化(使用String.valueOf()的)双精度值是否总是生成准确的原始双精度值?

除了NaN之外,正如您所说,是的,该不变量应该保持不变。如果不是,那就是JDK的错误

Double.toString
在其Javadoc中这样说:

m或a的小数部分必须打印多少位?必须至少有一个数字来表示小数部分,除此之外,还必须有尽可能多的数字,但只能有尽可能多的数字来唯一区分参数值与double类型的相邻值。也就是说,假设x是精确的数学值,由该方法为有限非零参数d生成的十进制表示表示。那么d必须是最接近x的两倍值;或者,如果两个双精度值与x相等,则d必须是其中之一,并且d的有效位的最低有效位必须为0

总之,它返回足够的数字来唯一地标识这个双精度,因此
double.parseDouble
应该返回转换为字符串的完全相同的双精度