Double.parseDouble()给出"多点,NumberFormatException"

时间:2016-01-28 10:54:40

标签: java nullpointerexception double

我必须通过将两个字符串解析为Double来比较它们 字符串是:" 2.1.10"和" 2.1.9"。在这里,我需要知道第一个是否大于第二个? 但是,在使用
解析这些时 Double.parseDouble("2.1.10")Double.parseDouble("2.1.9")它给出了NullPointerException,说'&34;多点"。

5 个答案:

答案 0 :(得分:2)

你不比较双打,你比较版本号,这看起来但不是数字,你必须比较每个位置。

类似的东西:

String[] v1 = "2.1.9".split("\\.");
String[] v2 = "2.1.10".split("\\.");

if (v1.length != v2.length)
    return;

for (int pos = 0; pos < v1.length; pos++) {
    // compare v1[pos] with v2[pos] as necessary
    if (Integer.parseInt(v1[pos]) > Integer.parseInt(v2[pos])) {
        System.err.println("v1 is greater");
    } else if (Integer.parseInt(v1[pos]) < Integer.parseInt(v2[pos])) {
        System.err.println("v2 is greater");
    }
}

结果:

v2 is greater

答案 1 :(得分:1)

原因是你的号码中有两位小数,这在数学中是不允许的。从字符串中删除一个小数,它将起作用。

如果您使用的是版本号,请将其分解为三个数字并继续使用,就像您按字母顺序检查一样。

答案 2 :(得分:0)

这是不可能的,因为你的价值有两个'。'和java不检查两个小数点。删除一个,然后尝试。 建议将值分解为两个,例如 2.1.10 || 2.1.9 首先检查2.1是否相同。然后检查10/9是否相同。 希望这有帮助

答案 3 :(得分:0)

由于Double表示数值,因此它应该在数学上是正确的。换句话说,数字中只能有一个小数位。

因此 dill将正确执行 和 multiprocess将抛出您已经拥有的异常。

答案 4 :(得分:0)

2.1.10永远不能是数学数字,因此它给出了NumberFormatException。 即使你将空白传递给Double.parseDouble(&#34;&#34;)仍然抛出相同的NumberFormatException。

你宁愿存储&#34; 2.1.10&#34;只在字符串中而不是任何数字类型,如果您有任何其他选项,请告诉我。