3

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

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

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

4

1 回答 1

3

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

Double.toString在它的 Javadoc 中这样说:

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

总而言之,它返回了足够多的数字来唯一标识这个 double ,因此Double.parseDouble应该返回与转换为字符串的完全相同的 double 。

于 2012-06-28T17:30:48.507 回答