【问题标题】:How can I add two double values together to form another double value(casting) [closed]如何将两个双精度值相加以形成另一个双精度值(转换)[关闭]
【发布时间】:2012-04-30 01:26:39
【问题描述】:

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

 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

我觉得我背后的逻辑是有缺陷的,在这件事上的任何帮助将不胜感激。

编辑:我已根据需要添加了尽可能多的内容。

【问题讨论】:

  • imperial_stonesimperial_poundsimperial_footimperial_inches 有什么关系?
  • 第一个示例中的变量与第二个示例中的变量不匹配。是故意的吗?
  • 现在已经改了。
  • 喜欢吗? double total_imperial_weight = (double) Imperial_stones + (double) Imperial_pounds;

标签: java eclipse swing logic


【解决方案1】:

使用接受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】:

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

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

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

    【讨论】:

      【解决方案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。

      【讨论】:

      • 导致不匹配,类型不匹配:无法从 double 转换为 int,抱歉没有意识到您的编辑。
      • 我应该按照@trashgod 的建议将构造函数更改为加倍吗?如果不是,那么不这样做的原因是什么?
      • @Banned:如果你想显示双精度数,构造函数应该使用双精度数。如果显示的数字始终是 int 值,则在构造函数中使用 int。
      • 因为你有混合模型,我会say父母,Number。 +1
      猜你喜欢
      • 2013-02-11
      • 2020-05-24
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      • 2021-09-12
      • 2019-02-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多