2012-02-27 44 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