为什么下面代码的输出等于 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?
谢谢您的帮助。
为什么下面代码的输出等于 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?
谢谢您的帮助。
7/9*9 将这些数字计算为整数,因此 7/9 的计算结果为 0,并且 0*9 = 0。
当您使它们浮动时,您正在执行预期的计算。
尝试 7.0/9*9 得到 7,然后你将进行浮点运算。
在 C 语言中,当你除以整数时,余数会被丢弃。在这里,你正在做 7 / 9,然后取其结果并乘以 9。在步骤中,这是 C 的想法:
7 / 9 = 0
0 * 9 = 0
当您使用浮点数时,它可以正常工作,因为不再丢弃剩余部分。
在:
cout << 7 / 9 * 9;
你正在做整数算术。所以 7/9 是 0 而 0*9 是 0。
要使用浮点运算(这是您在第二个示例中使用的),您需要执行以下操作:
cout << 7.0 / 9 * 9;
7/9*9
等于(7 / 9) * 9
,但因为7
和9
是整数而不是浮点数,7 / 9
等于 0(除法的商)。
我认为这是一个精度问题。/ 和 * 运算符的优先级相同,因此 7/9*9 从左到右计算为 (7/9)*9。问题是 (7/9) 在整数算术中为 0。当您明确地将它们存储为浮点数时,该 / 操作以浮点数完成,它可以以比 int 更高的精度存储 7/9。
如果您想在没有精度问题的情况下在一行中进行计算,请尝试:
cout << 7.0f / 9.0f * 9.0f;
已经有很多正确答案了。补充说明:如果您想将其保留为整数运算而不使用浮点数,则需要对其进行排序,以便在除法之前进行乘法以获得最大精度(只要在乘法期间不会发生溢出。因此,而不是比(7.0/9)*9
它将转换为浮点数,你可以做(9*7)/9
.