双倍不存储适当的价值

时间:2012-11-14 05:53:58

标签: java variables printf types

我的代码,

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);
}

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

4 个答案:

答案 0 :(得分:3)

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

double z = (double) x / y;

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

答案 1 :(得分:3)

你必须在划分之前施放整数。我相信。

像这样,

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

答案 2 :(得分:3)

这种情况正在发生,因为你要分割的值是int而不是double,它们不会输出小数位,更明确的是以此为例

double z = 27/5;  和你的一样

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

答案 3 :(得分:1)

你在做什么:

double z = x / y;

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