单精度,双精度,声明float??%f,double???%d

#include <stdio.h>
void main()
{
folat a,b;
a=123456.789e5;
b=a+20;
printf("a=%f,b=%f\n",a,b);
}
以上的folat改为double,输出答案都是正确,只是有效数不同而如,
但为什么当把float改为double时,下面的("a=%f,b=%f\n",a,b)不改成("a=%d,b=%d\n",a,b);???不是上面的float对应%f,double就应对应%d吗,为什么不对,谢谢各位帮下忙
我想问的是("a=%f,b=%f\n",a,b)为什么不能改成("a=%d,b=%d\n",a,b);在什么时候可用%d,什么时候可用%f,像这条题用%d的话就不对呀

改成("a=%d, b=%d\n",a,b)当然不行。%d是以十进制形式输出整数。它是有范围的,是-32768~32767 上面a,b的值远远大于它的范围,当然溢出了。
float(单精度)对应的是%f,double(双精度)也是用%f表示。只是两者的有效范围不同而已。不能想当然尔都是取首字母。
%d是以带符号的十进制形式输出整数,范围-32768~32767
%u是以无符号十进制形式输出整数,范围0~65535
%o是以八进制无符号形式输出整数
%x是以十六进制无符号输出整数
%c是输出单个字符
%s是输出字符串
%f是以小数形式输出单,双精度数
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-10-25
float是单精度浮点数,double是双精度浮点数,而%d仅仅是让输出的是十进制浮点数而已,换成%c,%o,%x,都可以的,何况是%f呢,,单精度浮点数和双精度浮点数只是范围上的不同罢了,并不会影响printf的。
相似回答