如何将两个double值相加以形成另一个double值(cast)

时间:2012-04-30 01:26:40

标签: java eclipse swing logic

基本上,如果我有两个双重值:

 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无法强制转换为java.lang.Double

我觉得我背后的逻辑存在缺陷,对此事的任何帮助都会受到高度赞赏。

编辑:我已尽可能多地添加。

3 个答案:

答案 0 :(得分: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,而不是int,而不是int。

答案 1 :(得分:3)

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

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

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

    double imperial_stones =
        ((Number)stonesSpinnerImperial.getModel().getValue()).doubleValue();
    double imperial_pounds =
        ((Number)poundsSpinnerImperial.getModel().getValue()).doubleValue();

答案 2 :(得分:3)

如果stonesSpinnerImperial.getModel().getValue()返回的动态类型为Integer,并且您尝试将其投放到Double,则会获得ClassCastException

  

java.lang.Integer无法强制转换为java.lang.Double

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