质量外展预告 - JDK 19 - Double.toString() 和 Float.toString() 更改

OpenJDK 质量小组通过 OpenJDK 早期访问版本对 FOSS 项目进行测试,以此来提升版本整体质量。此预告是发送给相关项目的定期通信的一部分。如需详细了解该计划以及如何加入,请在此处查看。

JDK 19 - Double.toString()Float.toString() 更改

影响 Double.toString(double)Float.toString(float) 的错误已在Java 19 中修复

根据 Javadoc,Double.toString(double) 应生成数字尽可能少的字符串,但仍能将此 double 与相邻的 double 唯一区分开来。对于许多 double 来说,情况并非如此。例如,1e239.999999999999999E22 是相同的 double,而将 1e23 传递给 Double.toString(double) 会返回 "9.999999999999999E22"

规范已更新,实现也已更新。因此,从 JDK 19 开始,生成的部分字符串现在比早期版本中生成的字符串短。例如,在 JDK 19 中将 1e23 传递给此方法将返回 "1.0E23",而不是早期 JDK 版本中的 "9.999999999999999E22"。请注意,在 JDK 19 中,将 9.999999999999999E22 传递给此方法也会返回 "1.0E23",因为它们是相同的 double。许多 double 和 float 的字符串表示形式已更改,以匹配规范更新。

更多信息

如需了解更多详情,请查看此发行说明修复本身。

您还可以在 Joe Darcy 出色的“浮点运算:每个 Java 程序员都应该知道!”会话中详细了解浮点运算。

~