我有以下SOP:
System.out.println(9 - ((9 / 2) * 2));
根据我在学校学到的数学,它应该评估为0
。
但我得到的输出为1
...... !!!
我尝试在Google中评估相同的表达式,输出为0
。
根据Maths,Java评估为1,它被评估为0.任何解释?
答案 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