有人为什么这个表达式会评估为40?

时间:2016-11-02 18:02:53

标签: java math evaluation

有些人可以提供有关此代码输出40的原因吗? 我尝试使用双精度而不是整数并使用Math.round方法 确保它不是一个精确的问题。

{
    int x,y ;
    x = ((( 80 + 80 + 80 + 80 + 80) / 500) * 100);
    y = ((x / 2) + (80 / 4) + (80 / 4));
    System.out.println(y);
}

我使用计算器和我自己的脑袋评估了相同的表达式 在所有帐户上它应该是80!如果我犯了一个非常愚蠢的错误,我想 知道,但我不知道为什么会这样,以及如何解决它,提前谢谢!

2 个答案:

答案 0 :(得分:2)

你的x是0因为:

( 80 + 80 + 80 + 80 + 80) / 500)评估为0.

结果,y变为((0 / 2) + (80 / 4) + (80 / 4)),其评估为40。

请注意,当int类型介于0和1之间时,它变为0.

每条评论,在评估400/500时,x是int还是double都不相关,因为400和500是整数,所以java首先应用int算法,然后继续。

答案 1 :(得分:0)

x =((400)/ 500))* 100

这里400/500的评估结果为0,因为400和500被视为整数

所以y = 0 +(80/4)+(80/4)= 40