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

答えて

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

関連する問題