c语言中%f的的输入输出问题

在为什么我在输入17.8时输出的是17.799999
待解决 10 [ 标签:输出 ] NULL 离问题结束还有15天0小时

源代码为:
#include<stdio.h>
main()
{
float a;
scanf("%f",&a);
printf("%f\n",a);
}

在为什么我在输入17.8时输出的是17.799999

计算机内部用2进制。输入17.8,计算机内化为2进制时化不净,所以自动丢去尾数,从而引入了“截断误差”,输出时,再化回10进制,就看出“截断误差”。
printf("%.4f\n",a); // 考虑精度,输出有限小数位,就好了。
printf("%g\n",a); // 改用 %g 格式也可以。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2012-05-15
浮点数保存的是一个近似值,实际上微积分告诉我们17.79 9循环等于17.8~
你可以指定小数点位数:
#include<stdio.h>
main()
{
float a;
scanf("%f",&a);
printf("%.1f\n",a);//这里改动
}

-----------------------
D:\>gcc fudian.c

D:\>a
17.9
17.9

D:\>a
17.8
17.8

D:\>
第2个回答  2012-05-15
可以使用double型变量
第3个回答  2012-05-15
莫太纠结这个问题了 有时候计算机不同 结果就不同 正常的
第4个回答  2012-05-15
简单的说:no,计算机会用一串二进制无线逼近你这个数,有时候会差那么一点点,其实这一点点也不存在,因为就是相等!
相似回答