将字符串数组转换为BigDecimals数组

时间:2016-03-31 09:37:38

标签: java arrays

我正在尝试将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]);
        }

4 个答案:

答案 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();
    }           
    }