*************************************************************************************************************************************
《C程序设计》(谭浩强 4th)上是这样描述的:
g格式符。用来输出浮点数,系统自动选f格式或e格式输出,选择其中长度较短的格式,不输出无意义的0.如
double a = 12345678954321;
printf("%f\t%e\t%g\n",a,a,a);
输出结果为:
12345678954321.000000 1.234568e+013 1.23457e+013
可以从以上看到用%f格式输出占20列,用%e输出占13列,故%g采用%e格式输出。
*************************************************************************************************************************************
为什么小数位%e是6位,而%e是5位?不说按%e格式输出吗??
1.234568e+013 1.23457e+013
打错了。
为什么小数位%e是6位,而%g是5位?不说按%e格式输出吗??
1.234568e+013 1.23457e+013
%g四舍五入到整数输出
并没有四舍五入到整数啊,本来不用E表示的话,先不管他double,他就是个整数啊,小数全0舍什么啊
double a = 12345678954321
我就想知道,%g在这里不是取%e的值吗,为啥他俩不一样!?
%e 1.234568e+13
%g 1.23457e+13
dty@ubuntu:~$ cat t.c
#include
int main(void)
{
double a = 12345678954321;
printf("%f\t%e\t%g\n",a,a,a);
return 0;
}
dty@ubuntu:~$ ./a.out
12345678954321.000000 1.234568e+13 1.23457e+13
1:%g用于打印浮点型数据时,会去掉多余的零,至多保留六位有效数字
2:当%g用于打印超过6位的浮点型数据时,对于所有格式说明符都一样会遇到这样的问题,因为精度问题,%f不得不输出一个不精确的超过六位的数字,%e也是同样,而%g此时会选择%e格式进行输出,并且按第一条要求,去掉多余的零,并且四舍五入到6位数字。这是《C Primer Plus》中所说的超过精度的时候的情况。
3:当一个数字的绝对值很小的时候,要表示这个数字所需要的字符数目就会多到让人难以接受。举例而言,如果我们把π*10^-10写作0.00000000000314159就会显得非常丑陋不雅,反之,如果我们写作3.14159e-10,就不但简洁而且易读好懂,党支书是-4时,这两种表现形式大小相同。对于比较小的数值,除非该数的指数小于或者等于-5,%g才会采用科学技术发来表示,即,以%e的格式进行输出。
%f和%e默认小数点后六位
本回答被提问者采纳%g最多保留6位有效数字