【问题标题】:String value from a JTable to BigDecimal throws Java.lang.NumberFormatException从 JTable 到 BigDecimal 的字符串值抛出 Java.lang.NumberFormatException
【发布时间】:2014-09-23 15:51:33
【问题描述】:

我正在制作一个图形计算器,它允许计算有错误的数据(即 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)

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

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

还尝试了其他几种选择,例如:

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

非常感谢您对这个问题的任何帮助。

【问题讨论】:

  • 你在传递什么字符串...做一个 System.out.println("" + String);看看你实际上传递了什么新的 BigDecimal(String)。
  • 能否看一下代码,打印到控制台时的字符串值是多少?

标签: java string jtable bigdecimal numberformatexception


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多