【问题标题】:java.math.BigDecimal cannot be cast to java.lang.String?java.math.BigDecimal 不能转换为 java.lang.String?
【发布时间】:2018-01-23 00:12:23
【问题描述】:

我正在尝试添加数据类型(金钱)的行值,其中小数点后的零会自动在 Jtable 中形成,如下所示 55.0000 28.0000 60.0000 20.0000 50.0000

运行时日志显示此错误

java.math.BigDecimal 不能转换为 java.lang.String

这是从 Jtable 中添加行的代码

        double total = 0;
        for(int i = 0; i<table.getRowCount(); i++){
            double amount = Double.parseDouble((String) table.getValueAt(1, 6) );
            total+=amount;
        }
        totalSum.setText(String.valueOf(total));

*

有没有办法添加浮点类型值??

    *

【问题讨论】:

  • table.getValueAt(1, 6) 已经返回了一个BigDecimal,为什么你认为你需要将它转换为String?使用BigDecimal.doubleValue() 有什么问题?
  • 您可以使用object.toString() 可靠地将对象转换为字符串(假设object 不为空)。
  • Jim Garrison,先生,请您给我一个准确的解决方案。
  • 而且,顺便说一句,你总是得到同一个单元格 (1,6) 的值。我猜你的意思是 table.getValueAt(i, 6)

标签: java jtable sqldatatypes


【解决方案1】:

试试这样的:

BigDecimal total = BigDecimal.ZERO;
for (int i = 0; i < table.getRowCount(); ++i) {
    final BigDecimal amount = (BigDecimal)table.getValueAt(i, 6);
    total = total.add(amount);
}
totalSum.setText(total.toString());

【讨论】:

    【解决方案2】:

    改变

    double amount = Double.parseDouble((String) table.getValueAt(1, 6) );
    

    double amount = table.getValueAt(1, 6).doubleValue();
    

    无需将BigDecimal 转换为String 只是为了生成double

    【讨论】:

    • @KamranAshiq 所有编译器都知道getValueAt()Object。显然,该方法是使用Object 作为返回类型定义的。如果在这种情况下该方法真的会返回BigDecimal,您可以将其转换为BigDecimal,然后使用doubleValue()((BigDecimal)table.getValueAt(1,6)).doubleValue()。这仅在它返回的对象确实是BigDecimal 时才有效。它不会将任何其他内容转换为BigDecimal。相反,如果它不是正确的类型,你会得到一个异常。
    • 是的,但我认为您应该指出这会失去精确性:您只能使用 BigDecimal 来执行此操作,而不会出现此问题。
    猜你喜欢
    • 2013-04-27
    • 1970-01-01
    • 2018-02-10
    • 2015-05-18
    • 2011-10-27
    • 2019-10-19
    • 2011-05-09
    • 2014-06-24
    • 1970-01-01
    相关资源
    最近更新 更多