c语言下面%g采用%e格式输出时,为什么结果不一样?

*************************************************************************************************************************************
《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

二者均用于浮点数输出。
其中,%e输出为科学计数法形式,比如12.3会输出
1.23E1的形式。
而%g是一种智能的方式,会比较按照数值输出,及科学计数法输出,哪种情况更短,对于12.3就是比较
12.3和1.23E1哪个更短,明显是12.3,所以在用%g输出时,就会输出12.3。

所以,用%e和%g输出浮点数得到不同结果是正常的,就是输出小数形式比输出科学计数法形式更简洁。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2017-09-22
e                 以指数形式输出单、双精度实数
E                 以指数形式输出单、双精度实数
f                  以小数形式输出单、双精度实数
g                 以%f%e中较短的输出宽度输出单、双精度实数,%e格式在指数小于-4或者大于等于精度时使用
G                 以%f%e中较短的输出宽度输出单、双精度实数,%e格式在指数小于-4或者大于等于精度时使用追问

%g四舍五入到整数输出

并没有四舍五入到整数啊,本来不用E表示的话,先不管他double,他就是个整数啊,小数全0舍什么啊
double a = 12345678954321

追答dty@ubuntu:~$ cat t.c
#include <stdio.h>

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

追问

我就想知道,%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默认小数点后六位

本回答被提问者采纳
第2个回答  2019-02-22

    %g最多保留6位有效数字

相似回答