C语言中%g的问题

请问 为什么printf("%g\n",123.56789); 输出为 123.568
为什么printf("%.7g\n",123.56789); 输出为 123.5679
请指教

C语言中,printf()函数的%后面可以接这些参数:
%[flags] [width] [.precision] [{h | l | I64 | L}]type
flags是格式化输出的显示方式,width指定最少的输出字符个数,precision指定最大的输出字符个数,或者浮点数的输出精度,type指定输出类型。

根据你的情况,printf("%.7g\n",123.56789),则是输出七位有效数字的double型,因此123.56789被四舍五入到123.5679 ;
而printf("%g\n",123.56789)没有指定精度,所以采用默认值6,所以输出六位有效数字的123.568
你还可以试试这个:printf("%13.7g\n",123.56789)看看结果怎样?

查看MSDN可以得到更多的帮助^_^

参考资料:MSDN

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-05-21
可以自动选取%f或%e的方式输出浮点数的有效数字.
如果没有指出精度,
则默认为6;
如果格式转换后其指数小于-4
或者大于等于其精度,
则使用e形式.
转换结果消除了小数部分末尾的零;
小数点前面至少有一位十进制数字.
第2个回答  2008-11-19
http://baike.baidu.com/view/410546.htm
到百科看看
可能会有帮助
第3个回答  2008-11-19
输出精度不同