我正在尝试将String []转换为BigDecimal [],但我得到的是java.lang.NumberFormatException
这是我的代码
BigDecimal montanttt[] = new BigDecimal[montantt.length];
for (int i = 0; i < montantt.length; i++) {
montanttt[i] = new BigDecimal(montantt[i]);
System.out.println(montanttt[i]);
}
答案 0 :(得分:2)
Java 8上的紧凑型解决方案就在这里。
Arrays.stream(montantt).map(s -> {
try {
return new BigDecimal(s);
} catch (NumberFormatException e) {
return BigDecimal.ZERO;
}
}).toArray(BigDecimal[]::new);
如果NumberFormatException
无法转换为String
,您将获得BigDecimal
。但是如果抛出异常,你可以返回一些常量,例如BigDecimal.ZERO
。
它适用于您的输入["0.50","0.20"]
。
答案 1 :(得分:2)
您应该在for循环中使用try / catch检查异常:
for (int i = 0; i < montantt.length; i++) {
try {
montanttt[i] = new BigDecimal(montantt[i]);
System.out.println(montanttt[i]);
} catch (NumberFormatException e) {
System.out.println("Exception while parsing: " + montantt[i]);
}
}
答案 2 :(得分:1)
尝试清除所有不属于数字的字符并在解析前将小数点标准化,例如:
String normalized = montantt[i].replace(",", ".").replaceAll("[^-.0-9eE]", "");
BigDecimal d = new BigDecimal(normalized);
答案 3 :(得分:1)
试试这个:
BigDecimal montanttt[] = new BigDecimal[montantt.length];
for (int i = 0; i < montantt.length; i++) {
try {
montanttt[i] =BigDecimal.valueOf(Double.valueOf(montantt[i]))
System.out.println(montanttt[i]);
} catch (Exception e) {
e.printStackTrace();
}
}