c语言float输出不精确
求平均分的程序,输入格式5
92 76 69 58 88
用计算器算出来是76.6,输出是76.599998,为什么呢?
#include<stdio.h>
void pj(int n,float a[])
{
int i;
float s=0,result;
for(i=0;i<n;i++)
s=s+a;
result = s/(n*1.0);
printf("%d门课程平均分:%.6f\n",n,result);
}
int main()
{
int n,i;
float a;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%f",&a);
pj(n,a);
return 0;
} 本帖最后由 qiuyouzhi 于 2020-7-5 18:47 编辑
精度问题呗,用double试试
#include<stdio.h>
void pj(int n,double a[])
{
int i;
double s=0,result;
for(i=0;i<n;i++)
s=s+a;
result = s/(n*1.0);
printf("%d门课程平均分:%lf\n",n,result);
}
int main()
{
int n,i;
double a;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%lf",&a);
pj(n,a);
return 0;
}
这样就成了
这个应该是和 Python 一个道理吧,浮点数本身都无法精确 Twilight6 发表于 2020-7-5 18:10
这个应该是和 Python 一个道理吧,浮点数本身都无法精确
是的{:10_250:} 问题好难,很多简单的小数压根不能精确存储,所以也就不能精确输出
https://blog.51cto.com/10984944/2475898 Hello. 发表于 2020-7-5 18:27
问题好难,很多简单的小数压根不能精确存储,所以也就不能精确输出
https://blog.51cto.com/10984944/2475 ...
好像确实是因为小数进制转换所以有误差 小甲鱼的铁粉 发表于 2020-7-5 18:29
好像确实是因为小数进制转换所以有误差
对的。 永恒的蓝色梦想 发表于 2020-7-5 18:39
对的。
{:10_256:} qiuyouzhi 发表于 2020-7-5 18:10
精度问题呗,用double试试
这样就成了
printf("%d门课程平均分:%.lf\n",n,result);别说误差了,小数部分直接没了 永恒的蓝色梦想 发表于 2020-7-5 18:43
别说误差了,小数部分直接没了
噗,我记得我把小数点去掉了.. qiuyouzhi 发表于 2020-7-5 18:44
噗,我记得我把小数点去掉了..
{:10_277:}
页:
[1]