以下语句是否适用于任何double
(Java 原始双精度 IEEE-754),除了NaN
:
Double.parseDouble(String.valueOf(d)) == d
否则,解析序列化的(使用 String.valueOf())双精度值是否总是产生精确的原始双精度值?
以下语句是否适用于任何double
(Java 原始双精度 IEEE-754),除了NaN
:
Double.parseDouble(String.valueOf(d)) == d
否则,解析序列化的(使用 String.valueOf())双精度值是否总是产生精确的原始双精度值?
正如您所说,除了 NaN 之外,是的,该不变量应该成立。如果没有,那就是 JDK 错误。
Double.toString
在它的 Javadoc 中这样说:
m 或 a 的小数部分必须打印多少位?必须至少有一个数字来表示小数部分,除此之外,必须有尽可能多的数字,但仅能将参数值与相邻的 double 类型值区分开来。也就是说,假设 x 是由该方法为有限非零参数 d 生成的十进制表示所表示的精确数学值。那么 d 必须是最接近 x 的 double 值;或者如果两个双精度值同样接近 x,则 d 必须是其中之一,并且 d 的有效位的最低有效位必须为 0。
总而言之,它返回了足够多的数字来唯一标识这个 double ,因此Double.parseDouble
应该返回与转换为字符串的完全相同的 double 。