任务:
我正在从数据库获取技术数据,需要对其进行处理,以便将其放入需要双值的数据库中。数据库中的实体是电梯,具有“行驶高度、重量、..:”等技术数据。
源数据库给了我 strings
采用指数数格式,即:
2.8300000000000000E+04
.
然后我将这个字符串转换为 Double
像这样:
public Double getDoubleNumberFromJSONString(String inputValue) {
return Double.valueOf(inputValue);
}
输出:28.300
(现在是双)
问题:
大多数时候我的方法都有效,但有时源数据库不会提供指数数字,但类似这样的事情:
2,200.0 mm
...所以一个非指数数和一个单位。这导致 NumberFormatException
。
我不知道如何解决这个问题,因为源输入实际上可能有很大差异:
1.000 kg
... kg 1.000
... mm 2,000
... 350
... 350.0
... 350,0
...
由于我们的数据库需要双格式号码,因此简单地转发源号码是行不通的。
我的解决方案:
我尝试使用instanceof
检查该字符串是否实际上可能是 Double
:
public Object getDoubleNumberFromJSONString(String inputValue) {
// FIXME Throws an error
if(Double.valueOf(inputValue) instanceof Double){
return Double.valueOf(inputValue);
}
else{
System.out.println("Had to return inputValue in DoubleNumber()! Crash?");
return inputValue;
}
}
但是Double.valueOf(inputValue)
已经抛出了 NumberFormatException
,所以我不知道如何处理这种情况。
问题:
如何将输入正确解析为 Double
?
最佳答案
感谢Julien Lopez' proposal in the comments我能够让它按预期工作!
这是我构建的解决方案:
public Double getDoubleNumberFromJSONString(String inputValue) {
try {
return Double.valueOf(inputValue);
} catch (NumberFormatException e) {
Scanner sc = new Scanner(inputValue);
double value1 = sc.nextDouble();
sc.close();
return value1;
}
}
首先,该方法尝试将输入字符串从指数格式转换为 double 。
如果失败,则会抛出NumberFormatException
。
然后我使用扫描仪来扫描字符串中的双值并返回它。
我已接受我的问题作为 Julien Lopez 提案的副本,因为那里的解决方案非常适用于我的问题。我回答了我自己的问题作为一个工作示例。
关于java - 将指数数字格式的字符串转换为 double 会导致 NumberFormatException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40787050/