鱼C论坛

 找回密码
 立即注册
查看: 1355|回复: 12

[已解决]c语言float输出不精确

[复制链接]
发表于 2020-7-5 18:08:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求平均分的程序,输入格式
  1. 5
  2. 92 76 69 58 88
复制代码

用计算器算出来是76.6,输出是76.599998,为什么呢?
  1. #include<stdio.h>
  2. void pj(int n,float a[])
  3. {
  4.         int i;
  5.         float s=0,result;
  6.         for(i=0;i<n;i++)
  7.                 s=s+a[i];
  8.         result = s/(n*1.0);
  9.         printf("%d门课程平均分:%.6f\n",n,result);
  10. }
  11. int main()
  12. {
  13.         int n,i;
  14.         float a[10];
  15.         scanf("%d",&n);
  16.         for(i=0;i<n;i++)
  17.                 scanf("%f",&a[i]);
  18.         pj(n,a);
  19.         return 0;
  20. }
复制代码
最佳答案
2020-7-5 18:10:28
本帖最后由 qiuyouzhi 于 2020-7-5 18:47 编辑

精度问题呗,用double试试
  1. #include<stdio.h>
  2. void pj(int n,double a[])
  3. {
  4.         int i;
  5.         double s=0,result;
  6.         for(i=0;i<n;i++)
  7.                 s=s+a[i];
  8.         result = s/(n*1.0);
  9.         printf("%d门课程平均分:%lf\n",n,result);
  10. }
  11. int main()
  12. {
  13.         int n,i;
  14.         double a[10];
  15.         scanf("%d",&n);
  16.         for(i=0;i<n;i++)
  17.             scanf("%lf",&a[i]);
  18.         pj(n,a);
  19.         return 0;
  20. }
复制代码

这样就成了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 18:10:28 | 显示全部楼层    本楼为最佳答案   
本帖最后由 qiuyouzhi 于 2020-7-5 18:47 编辑

精度问题呗,用double试试
  1. #include<stdio.h>
  2. void pj(int n,double a[])
  3. {
  4.         int i;
  5.         double s=0,result;
  6.         for(i=0;i<n;i++)
  7.                 s=s+a[i];
  8.         result = s/(n*1.0);
  9.         printf("%d门课程平均分:%lf\n",n,result);
  10. }
  11. int main()
  12. {
  13.         int n,i;
  14.         double a[10];
  15.         scanf("%d",&n);
  16.         for(i=0;i<n;i++)
  17.             scanf("%lf",&a[i]);
  18.         pj(n,a);
  19.         return 0;
  20. }
复制代码

这样就成了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 18:10:33 | 显示全部楼层



这个应该是和 Python 一个道理吧,浮点数本身都无法精确
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-5 18:26:25 | 显示全部楼层
Twilight6 发表于 2020-7-5 18:10
这个应该是和 Python 一个道理吧,浮点数本身都无法精确

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 18:27:48 | 显示全部楼层
问题好难,很多简单的小数压根不能精确存储,所以也就不能精确输出
https://blog.51cto.com/10984944/2475898

点评

换头像了?  发表于 2020-7-5 18:39
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-5 18:29:34 | 显示全部楼层
Hello. 发表于 2020-7-5 18:27
问题好难,很多简单的小数压根不能精确存储,所以也就不能精确输出
https://blog.51cto.com/10984944/2475 ...

好像确实是因为小数进制转换所以有误差
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 18:39:37 | 显示全部楼层
小甲鱼的铁粉 发表于 2020-7-5 18:29
好像确实是因为小数进制转换所以有误差

对的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 18:41:17 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 18:43:29 | 显示全部楼层
qiuyouzhi 发表于 2020-7-5 18:10
精度问题呗,用double试试

这样就成了
  1. printf("%d门课程平均分:%.lf\n",n,result);
复制代码
别说误差了,小数部分直接没了

点评

试试点评自己  发表于 2020-7-5 18:44
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 18:44:51 | 显示全部楼层
永恒的蓝色梦想 发表于 2020-7-5 18:43
别说误差了,小数部分直接没了

噗,我记得我把小数点去掉了..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-5 18:46:32 | 显示全部楼层
qiuyouzhi 发表于 2020-7-5 18:44
噗,我记得我把小数点去掉了..

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 18:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表