Android的parseDouble返回无穷大时,它应该抛出NumberFormatExcepti

2019-07-02 17:30发布

我想,以确定是否一个String代表一个Double 。 我期待下面的代码抛出一个NumberFormatException

String s = "type1234";

try {
    Double val = Double.parseDouble(s);
} catch (NumberFormatException e) {
    // Handle exception
    e.printStackTrace();
}

相反, val结束了Infinity 。 我跑的代码在一个标准的JVM和它,事实上,抛出NumberFormatException

它看起来像Android是忽略了主角“典型”,然后解析它为e ^ 1234,这是出于Double的范围。

这是预期的行为? 如果是这样,什么是更可靠的方法来确定是否一个String可以解析为Double

Answer 1:

检查的最快方式,如果一个字符串可以解析为Double在Java中

对这个职位的答案适用于Android。 我已经测试了ICS。



Answer 2:

使用正则表达式来验证自己,如果你不信任的框架。 下面是做到这一点的一种方式的例子。

    // You can get much fancier than this to handle all cases, but this should handle most
    String regexDouble = "^-?\\d*(\\.\\d+)?$";
    boolean isDouble = val.matches(regexDouble);


文章来源: Android parseDouble returns Infinity when it should throw NumberFormatException