c语言printf("%f")的问题!

#include <stdio.h>
void main()
{
float x,y;
x=111111.111;y=222222.222;
printf("%f",x+y);
}
为什么输出的结果是333333.328125??
请大神详细点解说

x=111111.111;y=222222.222;
尽管它们的和的真值为333333.333,但由于它们是float浮点数,只保留7位有效数字,即前面的7个3是有效的,而后面的则都是由一些无效数字组成,因此结果为333333.3XXXXX,这些X都是些随机的无效数字。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-11
“%f”为输出单精度类型的值,它输出的值有效数字是7位,也就是说,计算结果333333.333,只取前7位,即333333.3。但float输出又要求保留6位有效数字,所以在计算结果(333333.3)后会继续输出,而此时增加的5位小数的值是随机的
第2个回答  2014-03-11
#include <stdio.h>
void main()
{
double x,y;
x=111111.111;y=222222.222;
printf("%f",x+y);
}
用double类型
第3个回答  2014-03-11
因为float精确8位,而double精确到16位。楼主的程序用double类型输出就可以全部打印,还有不懂的就问我吧,望采纳!C语言的问题都可以问我
第4个回答  2014-03-11
精度问题吧,有效数字太多了
你用double 类型 试试,通配符是%lf
相似回答