2017-11-11 263 views
-1

C语言,文件stdio.h库无法计算正确的平均

示例代码:

float avg; 
avg = 3/2; 
printf("Average: %.2f", avg); 

从上面我期待下面的输出代码:

Average = 1.50 

但是相反我得到:

Average = 1.00 

这是为什么?我如何获得正确的输出?

+0

最好_不要编辑问题的答案。如果需要,请发布自己的答案。回顾[我应该怎么做当有人回答我的问题?](https://stackoverflow.com/help/someone-answers) – chux

回答

0
#include <stdio.h> 

int main(void) { 
float avg; 
avg = (float) 3/2; 
printf("Average: %.2f", avg); 

    return 0; 
} 
+0

3/2是一个整数除法,这就是为什么答案来了1.00,将3转换为浮点数然后执行分区,它会给出正确的结果 – anupam691997

+0

这个评论将在答案中编辑得最好。 – chux

0

你应该这样使用它.. avg=3.0/2.0否则它正在做整数除法。否则它会被截断为1。 (Integer divison截断,所以任何小数部分,这里丢弃.5)。

常数中的小数点表示它是浮点。所以结果不会被截断。

从标准: - §6.5.5.5

当整数分割,/运算的结果是 代数商与丢弃任何小数部分。

1

3和2是整数,因此所得到的整数,即1然后将投射到浮在分割后,你将有1.00。 你必须让他们漂浮, 做到这一点:

avg = 3.0/2.0; 
0

avg = 3/2; //总共有3个运营商,其中=具有最低优先级因此,我们将在最后的分配。 现在当你在做3/2时,两个操作数都是整数常量,所以这个操作的结果将只是整数。在C 3/2中产生1而不是1.5,因为结果将是整数类型不是浮动类型。

您希望预期的输出使操作数为浮动类型,如下所示。

avg = (float)3/2 ; 
0

您正在执行整数除法。所以小数部分被丢弃。

尝试此

float avg; 
avg = 3.0/2; 
printf("Average: %.2f", avg); 

通过保持任何分子或类型的分母浮动它将执行浮点除法。