基本上,如果我有两个双重值:
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
我觉得我背后的逻辑存在缺陷,对此事的任何帮助都会受到高度赞赏。
编辑:我已尽可能多地添加。答案 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
,因为您正在使用接受整数的构造函数。使用接受双精度的构造函数或将计算限制为整数运算。