0

我拥有的代码,

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 中,它完全能够保存十进制值但它不是,逻辑是什么?

4

4 回答 4

3

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

double z = (double) x / y;

原因是x / y单机是一个 int,所以它实际上是评估为 5,然后解析为 double。

于 2012-11-14T05:56:50.287 回答
3

我相信你必须在划分之前转换整数。

像这样,

double z = (double) x / (double) y;
于 2012-11-14T05:56:56.470 回答
3

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

双 z = 27 /5; 和你一样

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

于 2012-11-14T05:57:05.660 回答
1

你在做什么:

double z = x / y;

是整数除法,然后将结果转换为双精度

于 2012-11-14T05:58:10.780 回答