【问题标题】:Double not storing proper value双倍未存储正确的值
【发布时间】:2012-11-14 05:53:57
【问题描述】:

我的代码,

public static void main(String[] args) {
    int x = 27;
    int y = 5;
    double z = x / y;
    System.out.println(" x = " + x + " y = "+y +" z = "+z);
}

在上面的代码中,我知道要打印出变量 z 的小数位 0.4,我们必须使用 printf,但我的问题是为什么变量 z 不存储 5.4 而只存储 5? 我的意思是 int / int 然后输出存储在一个 double 中,它完全能够保存十进制值但它不是,逻辑是什么?

【问题讨论】:

标签: java variables printf types


【解决方案1】:

发生这种情况是因为您要除以的值是 int 而不是 double 并且它们不会输出小数位,以更清楚为例

双 z = 27 /5; 和你一样

双 z = 27.0/5.0; 现在 z = 5.4; 因此,这表明您正在执行计算的数据类型也应该与您期望输出的数据类型相同。

【讨论】:

    【解决方案2】:

    您需要将其中一个操作数转换为双精度

    double z = (double) x / y;
    

    原因是x / ystand-alone 是一个int,所以它真的是评估为5,然后解析为double。

    【讨论】:

    • 不,他需要将 其中一个操作数 转换为双精度数。铸造操作的结果是已经发生的事情。您的代码做了必要的事情,但您的描述有误。
    【解决方案3】:

    我相信你必须在除法之前转换整数。

    这样,

    double z = (double) x / (double) y;
    

    【讨论】:

    • @John 你有更好的解释
    【解决方案4】:

    你在做什么:

    double z = x / y;
    

    是整数除法,然后将结果转换为double

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-06-08
      • 2021-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-13
      • 2023-03-27
      相关资源
      最近更新 更多