从JTable到BigDecimal的字符串值抛出Java.lang.NumberFormatException

时间:2014-09-23 15:51:34

标签: java string jtable bigdecimal numberformatexception

我正在制作一个图形计算器,允许计算有错误的数据(即5 + -0.02)。我创建了一个名为Numbers3的对象,其属性中有一个BigDecimal变量。当我通过控制台输入数据时,一切正常。当我试图从JTable检索数据时出现问题;我将对象转换为String,但当它面临BigDecimal(String)时会引发异常:

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException
    at java.math.BigDecimal.<init>(BigDecimal.java:470)
    at java.math.BigDecimal.<init>(BigDecimal.java:739)

这就是我从JTableString获取对象的方法。这是有效的,因为当我从.getClass()打印返回时,输出为java.lang.String):

String number = (String)(table.getValueAt(i,j));

还尝试了其他几个选项,例如:

String number=new String(String.valueOf(table.getValueAt(i,j));

我真的很感激这个问题的任何帮助。

1 个答案:

答案 0 :(得分:0)

尝试规范化字符串以符合BigDecimal要求:

private static BigDecimal parse(String str) {
    String normalized = str.replaceAll("\\s", "").replace(',', '.');
    return new BigDecimal(normalized);
}

上面的代码从输入字符串中删除所有空白字符(BigDecimal构造函数中不允许这样做)。

更重要的是 - 如果需要,它会将逗号替换为小数点。