C语言,文件stdio.h库无法计算正确的平均
示例代码:
float avg;
avg = 3/2;
printf("Average: %.2f", avg);
从上面我期待下面的输出代码:
Average = 1.50
但是相反我得到:
Average = 1.00
这是为什么?我如何获得正确的输出?
C语言,文件stdio.h库无法计算正确的平均
示例代码:
float avg;
avg = 3/2;
printf("Average: %.2f", avg);
从上面我期待下面的输出代码:
Average = 1.50
但是相反我得到:
Average = 1.00
这是为什么?我如何获得正确的输出?
#include <stdio.h>
int main(void) {
float avg;
avg = (float) 3/2;
printf("Average: %.2f", avg);
return 0;
}
3/2是一个整数除法,这就是为什么答案来了1.00,将3转换为浮点数然后执行分区,它会给出正确的结果 – anupam691997
这个评论将在答案中编辑得最好。 – chux
你应该这样使用它.. avg=3.0/2.0
否则它正在做整数除法。否则它会被截断为1。 (Integer divison截断,所以任何小数部分,这里丢弃.5
)。
常数中的小数点表示它是浮点。所以结果不会被截断。
从标准: - §6.5.5.5
当整数分割,/运算的结果是 代数商与丢弃任何小数部分。
3和2是整数,因此所得到的整数,即1然后将投射到浮在分割后,你将有1.00。 你必须让他们漂浮, 做到这一点:
avg = 3.0/2.0;
avg = 3/2;
//总共有3个运营商,其中=具有最低优先级因此,我们将在最后的分配。 现在当你在做3/2时,两个操作数都是整数常量,所以这个操作的结果将只是整数。在C 3/2中产生1而不是1.5,因为结果将是整数类型不是浮动类型。
您希望预期的输出使操作数为浮动类型,如下所示。
avg = (float)3/2 ;
您正在执行整数除法。所以小数部分被丢弃。
尝试此
float avg;
avg = 3.0/2;
printf("Average: %.2f", avg);
通过保持任何分子或类型的分母浮动它将执行浮点除法。
最好_不要编辑问题的答案。如果需要,请发布自己的答案。回顾[我应该怎么做当有人回答我的问题?](https://stackoverflow.com/help/someone-answers) – chux