哪个错了? Java,数学还是我......?困惑...!

时间:2013-11-25 10:44:01

标签: java expression arithmetic-expressions

我有以下SOP:

System.out.println(9 - ((9 / 2) * 2));

根据我在学校学到的数学,它应该评估为0

但我得到的输出为1 ...... !!!

我尝试在Google中评估相同的表达式,输出为0

根据Maths,Java评估为1,它被评估为0.任何解释?

5 个答案:

答案 0 :(得分:6)

你是整数分裂的受害者!

  

在计算机程序中划分整数需要特别小心。一些   编程语言,处理整数除法(即给出   整数商作为答案)。所以答案是整数。

一些逻辑:

在Java中:

9/2 = 4 
4*2 = 8
9-8 = 1

在现实生活中:

9/2 = 4.5
4.5*2 = 9
9-9 = 0

为了避免你可以在你的师中加入一个参数加倍:

System.out.println(9 - (((double)9 / 2) * 2));

答案 1 :(得分:1)

整数分裂是罪魁祸首。 (9/2)给出4。因此,(9 - (4 * 2))会评估为1

步骤一步:

(9 - ((9 / 2) * 2));
(9 - ((4) * 2)); // integer division
(9 - (8));
1 // final result

答案 2 :(得分:1)

9 / 2是整数除法。它评估为4。

答案 3 :(得分:1)

它是用整数数学完成的(参见Java语言规范中的ch.5.6.2),所以: 9/2 = 4 然后4 * 2 = 8 然后9 - 8 = 1

如果你想要0,那么

public class Dec
{
    public static void main(String[] args)
    {
        System.out.println(9.0 - ((9.0 / 2.0) * 2.0));
    }
}

对于理解Java语言规范中的"Binary Numeric conversion",有一个简短的章节。

答案 4 :(得分:1)

您正面临整数分裂的共同问题。

   9 - ((9 / 2) * 2)// here first 9/2=4 (int division)

现在9-(4*2)=1

这就是你获得1

的原因
相关问题