0

基本上,假设我有两个这样的双值:

 import javax.swing.JSpinner;
 import javax.swing.SpinnerNumberModel;


public class UI  {
    public static void main(String args[]){
        JSpinner stonesSpinnerImperial;
        JSpinner poundsSpinnerImperial;

        stonesSpinnerImperial = new JSpinner();
        poundsSpinnerImperial = new JSpinner();

        stonesSpinnerImperial.setModel(new SpinnerNumberModel(3, 3, 31, 1));
        poundsSpinnerImperial.setModel(new SpinnerNumberModel(0.0, 0.0, 13.0, 1.0));

        double imperial_stones = (double) stonesSpinnerImperial.getModel().getValue();
        double imperial_pounds = (double) poundsSpinnerImperial.getModel().getValue();
        double total_imperial_weight =  imperial_stones + imperial_pounds;

    }
}

但是我收到以下错误: java.lang.Integer cannot be cast to java.lang.Double

我觉得我背后的逻辑是有缺陷的,对此问题的任何帮助将不胜感激。

编辑:我已经添加了我认为需要的内容。

4

3 回答 3

3

为什么不简单地做:

  double imperial_stones = (Integer)stonesSpinnerImperial.getModel().getValue();
  double imperial_pounds = (Double) poundsSpinnerImperial.getModel().getValue();
  double total_imperial_weight = imperial_stones + imperial_pounds;

请注意,您必须将返回的对象强制转换为数字包装类,而不是原始类,因此是 Double,而不是 double,以及 Integer,而不是 int。

于 2012-04-30T01:42:13.920 回答
3

使用SpinnerNumberModel接受double值的 ;它在Double内部使用。例如,

new SpinnerNumberModel(3d, 3d, 31d, 1d)

附录:根据您更新的代码,考虑转换为Number,

    double imperial_stones =
        ((Number)stonesSpinnerImperial.getModel().getValue()).doubleValue();
    double imperial_pounds =
        ((Number)poundsSpinnerImperial.getModel().getValue()).doubleValue();
于 2012-04-30T01:42:49.453 回答
3

如果返回的动态类型stonesSpinnerImperial.getModel().getValue()是 anInteger并且您尝试将其强制转换为 a Double,您将得到 a ClassCastException

java.lang.Integer 不能转换为 java.lang.Double

在您的情况下,动态类型是一个,Integer因为您使用的是接受整数的构造函数。使用接受双精度的构造函数或将计算限制为整数算术。

于 2012-04-30T01:42:56.790 回答