海底世界网页游戏:C语言的高手进!!!有急事!!!

来源:百度文库 编辑:中科新闻网 时间:2024/05/08 16:59:09
main()
{float x;
double y;
x=123456.7777;y=123456.7777;
printf("x=%f,y=%f\n",x,y)
}
怎么运行的结果就是x=123456.781250
y=123456.777700
为什么X,Y的输出结果会是这个样子的?大虾们请赐教!

float 是单精度只能处理7位有效数字,对于x=123456.7777只能保证到小数点后一位是有效的,后面的是随机的,因为"%f"如果不指定输出宽度的话,系统默认在小数点后加上六位数.而且"%lf"对于double而言同"%f".

float的精确度不够.DOUBLE的精确度高些,而且都是有范围的,用的时候注意实数的精确范围,整数就注意别出界了.float 占用32位二进制,有24位用来确定精度,8位用来确定10的多少次方.double占用64位二进制,有48位用来确定精度,16位用来确定的多少次方.24位二进制只能精确到1-2的24次方也就是大概7位数,48位二进制可以精确到2的48次放,大概是14到15位数。

double 型的y 默认的是小数点后输出6位数字,所以y的输出就是那样了

因为FLOAT 只能处理7位有效数字

这是你使用FLOAT的结果,位数问题
你试下把x=23456.7777...或6.777777,都是六位的正确结果
好象FLOAT只能处理六位

数据益出了
小数不带f则是double型的
应:float x=1.2222f