我必须通过将两个字符串解析为Double
来比较它们
字符串是:" 2.1.10"和" 2.1.9"。在这里,我需要知道第一个是否大于第二个?
但是,在使用
解析这些时
Double.parseDouble("2.1.10")
或Double.parseDouble("2.1.9")
它给出了NullPointerException,说'&34;多点"。
答案 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;只在字符串中而不是任何数字类型,如果您有任何其他选项,请告诉我。