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.lang.ClassCastException:java.lang.Double无法转换为变量表达式的java.math.BigDecimal错误?