2013-04-04 32 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

相關問題