Java 无法在BigDecimal变量中放入双精度数字

Java 无法在BigDecimal变量中放入双精度数字,java,double,classcastexception,bigdecimal,jspinner,Java,Double,Classcastexception,Bigdecimal,Jspinner,我使用了一个双变量来保存物品的价格。该变量存储在postgresql数据库中的货币类型列下。我使用setBigDecimalposition,value SQL函数。在另一部分中,我使用JSpinner作为输入 Double current = 0.0; Double min = (double) Integer.MIN_VALUE; Double max = (double) Integer.MAX_VALUE; Double step = 0.1; JSpinner priceSpinne

我使用了一个双变量来保存物品的价格。该变量存储在postgresql数据库中的货币类型列下。我使用setBigDecimalposition,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

显然,priceSpinner.getValue返回BigDecimal,您试图将其转换为double,然后再转换回BigDecimal

你为什么不这样做呢

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

此程序演示了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的转换可能不精确。

JSpinner.getValue返回一个对象,您尝试将其转换为Double,但这似乎不可能,因为它的当前类是BigDecimal,因为您需要BigDecimal,请尝试setBigDecimalposition,BigDecimal priceSpinner.getValue;您可以发布完整的堆栈跟踪吗?您的代码中的哪一行实际导致了异常?重要提示:请不要使用双参数实例化BigDecimal对象。始终传递字符串参数。这上面有一个很好的片段,但是我找不到适合我一生的链接。当priceSpinner未填充时,默认值为零,我在线程AWT-EventQueue-0 java.lang.ClassCastException中得到此错误异常:java.math.BigDecimal无法转换为java.lang.Double不兼容类型对象无法转换为BigDecimalPriceSpiner.getValue返回一个不兼容的对象BigDecimal对于由Double构造的模型,微调器将返回一个Double。是的,但仍然需要显式强制转换,因为编译器不会知道微调器是如何构造的。是的,但您不能将Double强制转换为BigDecimal-您真的尝试过代码吗?