为什么以下代码的输出等于0或serven?
cout << 7/9*9; //output 0 (zero) why?
float nine = 9;
float seven = 7;
float i = seven/nine*nine;
cout << i //output 7 Why?
感谢您的帮助。
答案 0 :(得分:31)
7/9 * 9将这些数字评估为整数,因此7/9的计算结果为0,0 * 9 = 0。
当你使它们漂浮时,你正在进行预期的计算。
尝试7.0 / 9 * 9得到7,然后你将进行浮点运算。
答案 1 :(得分:6)
在C中,当您对整数进行除法时,其余部分将被丢弃。在这里,你正在做7/9,然后取结果并乘以9.在步骤中,这是C所想的:
7 / 9 = 0
0 * 9 = 0
使用浮动时,它可以正常工作,因为其余部分不再被丢弃。
答案 2 :(得分:5)
在:
cout << 7 / 9 * 9;
你正在做整数运算。所以7/9是0而0 * 9是0。
要使用浮点运算(这是您在第二个示例中使用的),您希望这样做:
cout << 7.0 / 9 * 9;
答案 3 :(得分:3)
7/9*9
等于(7 / 9) * 9
,但由于7
和9
是整数而不是浮点数,7 / 9
等于0(除法的商)
答案 4 :(得分:2)
我认为这是一个精确的问题。 /和*运算符的优先级相同,因此7/9 * 9从左到右依次为(7/9)* 9。问题是(7/9)在整数运算中为0。当你明确地将它们存储为浮点数时,/操作是以浮点形式完成的,它可以以比int更高的精度存储7/9。
如果您想在没有精度问题的情况下在一行中进行计算,请尝试:
cout&lt;&lt; 7.0f / 9.0f * 9.0f;
答案 5 :(得分:1)
许多正确的答案已经存在。附加说明:如果要将其保留为整数运算而不使用浮点,则需要对其进行排序,以便在除数之前进行乘法以获得最高精度(只要在乘法过程中不发生溢出。比转换为花车的(7.0/9)*9
,你可以(9*7)/9
。