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

我正在从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)); } } 

JRE6

 5.0E-4 0.0050 0.05 0.5 

JRE7

我正在寻找与上述变化相关的任何文档。 兼容性页面不包含它。

 5.0E-4 0.005 //changed. 0.05 0.5 

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

这是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)中修复。

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

  • Backport:JDK-2181423 – System.out.println(0.001)输出0.0010
  • 重复:JDK-5078240 – Double.toString(double)在某些情况下会添加尾随零
  • 重复:JDK-6575880 – Float.toString(float)添加尾随零
  • 相关:JDK-6935102 – Regtest
    closed / sun / misc / FloatingDecimal / ToString.java现在失败了。
  • 相关:JDK-4154042 – java.lang.FloatingDecimal可以被删除

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