有些人可以提供有关此代码输出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!如果我犯了一个非常愚蠢的错误,我想 知道,但我不知道为什么会这样,以及如何解决它,提前谢谢!
答案 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