2012-02-27 45 views
0

可能重複:
Compilation hangs for a class with field double d = 2.2250738585072012e-308程序在解析Double值時掛起?

爲什麼在解析雙精度值0.0222507385850720119e-00306這個Java程序掛起?

public class DoubleTest { 

    public static boolean isDoubleValue(String value) { 
    try { 
     Double.valueOf(value); 
     return true; 
    } catch (NumberFormatException e) { 
     return false; 
    } 
    } 


    public static void main(String a[]){ 

    DoubleTest.isDoubleValue("0.0222507385850720119e-306"); 
    System.out.println("out of hang..."); 
    } 

} 
+0

我假設您知道這是一年前由Oracle修復的Java錯誤? – 2012-02-27 04:42:27

+0

您使用的是什麼JDK版本? – Gevorg 2012-02-27 04:46:02

+0

它適用於版本爲1.6.0_26的JVM。 – Alanmars 2012-02-27 04:46:30

回答

0

它不適合我。

class Test { 
    public static double isDoubleValue(String value) { 
     try { 
      double d = Double.valueOf(value); 
      return d; 
     } catch (NumberFormatException e) { 
      return -1; 
     } 
    } 

    public static void main(String a[]){ 
     double d = Test.isDoubleValue("0.0222507385850720119e-306"); 
     System.out.println("out of hang... " + d); 
    } 
} 

輸出是:

out of hang... 2.2250738585072014E-308 

預期下面的程序在Eclipse靛藍(3.7.1)正常工作。

我會提到-308指數是在允許的double值的邊緣,因此它可能是您特定的Java版本中的一個錯誤。但是,如上所述,它在Indigo中不存在。

+0

謝謝! @paxdiablo。實際的原因是我使用的JDK問題(1.6.0_16) – 2012-02-27 06:18:25

+0

@ selvakumar.esra,通常沒有一個令人信服的理由不運行最新版本的bug修復版本。我建議至少升級到1.6.0_ 。 – paxdiablo 2012-02-27 06:26:31

+0

謝謝! @paxdiablo – 2012-02-27 08:38:50