为什么输出cout<< 7/9 * 9;是零?

时间:2009-10-08 21:10:53

标签: c++ integer-division

为什么以下代码的输出等于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?

感谢您的帮助。

6 个答案:

答案 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,但由于79是整数而不是浮点数,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