大神们,求救!C语言%g(%G)是如何选择%f或者%e(%E)进行输出的……

TKingL 2014-10-26 12:05:27
《C Primer Plus》(5th)中是这样描述的:
%g 根据数值不同自动选择 %f 或 %e ,%e 格式在指数小于-4或者大于等于精度时使用。
%G (基本上同上)
《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格式输出。

好了,这就是我在书上抄下来的一些东西,大神们,到底怎么理解这个问题?两本书,两个说法,又看不出来什么联系……求救!
...全文
1029 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
TKingL 2014-10-26
  • 打赏
  • 举报
回复 1
大家好……我貌似找到了解决办法了……这是我刚刚在《C陷阱与缺陷》上看到的。 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的格式进行输出。 这下看来,我们可以讲谭书与《C Primer Plus》上所说的统一起来……让我们向Andrew Koenig先生致敬吧!
mujiok2003 2014-10-26
  • 打赏
  • 举报
回复
http://www.cplusplus.com/reference/cstdio/printf/
罗博士 2014-10-26
  • 打赏
  • 举报
回复
你既然能看C primer plus了,还看老谭的书作甚。 老谭的书就是一本改错习题集
百曉生 2014-10-26
  • 打赏
  • 举报
回复
double输入时必须%lf,但输出时可以%f
按我的理解,
%g      根据数值不同自动选择 %f 或 %e ,%e 格式在指数小于-4或者大于等于精度时使用。

这里的%f指的是浮点数,已经大于精度了,所以这本其实也没错
TKingL 2014-10-26
  • 打赏
  • 举报
回复
引用 2 楼 mujiok2003 的回复:
http://www.cplusplus.com/reference/cstdio/printf/
如果按这么说来,谭浩强书上说的是对的嘛……可是C Primer Plus 为什么要这么说啊……难以理解还是……

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧