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

Posted

技术标签:

【中文标题】java.math.BigDecimal 不能转换为 java.lang.String?【英文标题】:java.math.BigDecimal cannot be cast to 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) 【参考方案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 来执行此操作,而不会出现此问题。

以上是关于java.math.BigDecimal 不能转换为 java.lang.String?的主要内容,如果未能解决你的问题,请参考以下文章

row.getList java.lang.ClassCastException:java.math.BigDecimal 不能转换为 scala.collection.Seq

java.math.BigDecimal cannot be cast to java.lang.Integer说类型不能转换,求解释!

java.math.BigDecimal cannot be cast to java.lang.String

Java.math.BigDecimal类

如何修复java.lang.ClassCastException:java.lang.Double无法转换为变量表达式的java.math.BigDecimal错误?

java.math.BigDecimal类multiply的使用