Java7 Double.toString() 返回 0.005 / java6 它是 0.0050

2022-09-01 23:25:17

我正在从 JDK6 升级到 JDK7。以下代码演示显示了Double.toString()

public class StringDemo
{

    public static void main(String[] args)
    {
        System.out.println(Double.toString(.0005));
        System.out.println(Double.toString(.005)); //different string
        System.out.println(Double.toString(.05));
        System.out.println(Double.toString(.5));
    }
}

杰瑞6

5.0E-4
0.0050
0.05
0.5

JRE7

我正在寻找与上述更改相关的任何文档。兼容性页面未涵盖它。

5.0E-4
0.005   //changed.
0.05
0.5

输出保存在许多参考文件中,并通过字符串比较进行比较 - 我需要修复比较,但好奇地想知道有关此更改的更多详细信息。关于为什么这种变化会得到赏金的权威答案。


答案 1

这是 Java 1.3 到 1.6 中的一个错误(在 1.7 中已解决)。

http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4511638错误报告 http://bugs.sun.com/view_bug.do?bug_id=4428022 包含更多详细信息。在 JDK 7 (b75) 中已修复。

相关报告 - 引用自上面的链接。

  • 向后移植: JDK-2181423 - 系统输出.打印(0.001) 输出 0.0010
  • 重复:JDK-5078240 - Double.toString(double)在某些情况下添加尾随零
  • 重复:JDK-6575880 - Float.toString(float) 添加尾随零
  • 相关内容:JDK-6935102 - 已关闭的重新测试
    /sun/misc/FloatingDecimal/ToString.java现在失败。
  • 相关内容: JDK-4154042 - java.lang.FloatingDecimal 可能被消除

OpenJDK 7 可解决此问题的更改,请访问:http://hg.openjdk.java.net/jdk7/tl/jdk/rev/f85aa3aedf41


答案 2