不能将Big数字放在BigDecimal变量中

时间:2015-01-05 13:32:47

标签: java double classcastexception bigdecimal jspinner

我使用Double变量来保存Item价格。该变量存储在postgresql数据库的money类型列下。我使用setBigDecimal(position,value)SQL函数。另一方面,我使用JSpinner作为输入。

Double current = 0.0;
Double min = (double) Integer.MIN_VALUE;
Double max = (double) Integer.MAX_VALUE;
Double step = 0.1;

JSpinner priceSpinner = new JSpinner(new SpinnerNumberModel(current, min, max, step));

当用户点击某个按钮时,我会获得用户所拥有的值,并通过SQL查询将其放入数据库中。

 insertStmt.setBigDecimal(position,BigDecimal.valueOf((double) priceSpinner.getValue()));

但是,我收到了这个小错误,

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Double

2 个答案:

答案 0 :(得分:4)

此程序说明Double和BigDecimal之间的双向转换:

import java.math.BigDecimal;

public class Test {
  public static void main(String[] args) {
    Double d1 = 1.3;
    BigDecimal bd1 = BigDecimal.valueOf(d1.doubleValue());
    Double d2 = bd1.doubleValue();
    System.out.println(d2);
  }
}

请注意,转换为Double可能不准确。

答案 1 :(得分:2)

显然priceSpinner.getValue()会返回BigDecimal,您尝试将其转换为double,然后又转回BigDecimal

为什么你不这样做?

insertStmt.setBigDecimal(position, (BigDecimal) priceSpinner.getValue());