4

为什么下面代码的输出等于 0 或被服务?

cout << 7/9*9;   //output 0 (zero)   why?

float nine = 9;
float seven = 7;
float i = seven/nine*nine;
cout << i     //output 7   Why?

谢谢您的帮助。

4

6 回答 6

31

7/9*9 将这些数字计算为整数,因此 7/9 的计算结果为 0,并且 0*9 = 0。

当您使它们浮动时,您正在执行预期的计算。

尝试 7.0/9*9 得到 7,然后你将进行浮点运算。

于 2009-10-08T21:12:58.797 回答
6

在 C 语言中,当你除以整数时,余数会被丢弃。在这里,你正在做 7 / 9,然后取其结果并乘以 9。在步骤中,这是 C 的想法:

7 / 9 = 0
0 * 9 = 0

当您使用浮点数时,它可以正常工作,因为不再丢弃剩余部分。

于 2009-10-08T21:13:30.167 回答
5

在:

cout << 7 / 9 * 9;

你正在做整数算术。所以 7/9 是 0 而 0*9 是 0。

要使用浮点运算(这是您在第二个示例中使用的),您需要执行以下操作:

cout << 7.0 / 9 * 9;
于 2009-10-08T21:14:30.150 回答
3

7/9*9等于(7 / 9) * 9,但因为79是整数而不是浮点数,7 / 9等于 0(除法的商)。

于 2009-10-08T21:13:52.553 回答
2

我认为这是一个精度问题。/ 和 * 运算符的优先级相同,因此 7/9*9 从左到右计算为 (7/9)*9。问题是 (7/9) 在整数算术中为 0。当您明确地将它们存储为浮点数时,该 / 操作以浮点数完成,它可以以比 int 更高的精度存储 7/9。

如果您想在没有精度问题的情况下在一行中进行计算,请尝试:

cout << 7.0f / 9.0f * 9.0f;

于 2009-10-08T21:15:34.033 回答
1

已经有很多正确答案了。补充说明:如果您想将其保留为整数运算而不使用浮点数,则需要对其进行排序,以便在除法之前进行乘法以获得最大精度(只要在乘法期间不会发生溢出。因此,而不是比(7.0/9)*9它将转换为浮点数,你可以做(9*7)/9.

于 2009-10-09T07:23:17.753 回答