2013-04-04 36 views
23

我从JDK6 to JDK7升级。下面的代码演示显示了Double.toString()Java7 Double.toString()返回0.005/java6它是0.0050

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 

输出保存在许多参考文件,并比较了串comparison-我需要修复的比较,但很想知道有关这一变化的详细信息。为什么这项改变会得到赏金的权威答案。

+3

另一个浮动解析错误在Java中,将导致尽管如此,编译器在无限循环中更有趣一些。 http://www.exploringbinary.com/java-hangs-when-converting-2-2250738585072012e-308/ – devnull 2013-04-04 13:35:57

回答

28

这是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 - 的System.out.println(0.001)0.0010输出
  • 重复:JDK-5078240 - Double.toString(双)增加了一个尾随零 在某些情况下
  • 重复: JDK-6575880 - Float.toString(浮点)添加尾随 零
  • 涉及:JDK-6935102 - Regtest
    关闭/阳光/其它/ FloatingDecimal/ToString.java现在失败。
  • 涉及:JDK-4154042 - java.lang.FloatingDecimal可能是 消除

的变化对OpenJDK 7的解决这个问题,请访问:http://hg.openjdk.java.net/jdk7/tl/jdk/rev/f85aa3aedf41

+0

谢谢!太好了。 – Jayan 2013-04-05 04:25:34

相关问题