C中%g和%f的区别是什么?

我正在通过K&R的C编程语言。 这里是一个打印双变量的语句,它是写的

printf("\t%g\n", sum += atof(line)); 

其中sum被声明为double。 任何人都可以帮我解决何时使用%g的情况下双倍或浮动的情况,以及%g和%f之间的差异。

请参阅任何参考手册,例如手册页 :

F,F

double参数被舍入并在样式[ – ] ddd.ddd中转换为十进制表示法,其中小数点字符后面的位数等于精度规范。 如果精度丢失,则取6; 如果精度明确为零,则不显示小数点字符。 如果出现小数点,则在其前面至少出现一个数字。 (SUSv2不知道F并且表示无穷大和NaN的字符串表示可用.C99标准指定'[ – ] inf’或'[ – ] infinity为无穷大,以及以’nan开头的字符串’对于NaN,在f转换的情况下,'[ – ] INF’或'[ – ] INFINITY’或’NAN *’在F转换的情况下。)

克,G

double参数以f或e格式转换(或G转换为F或E)。 精度指定有效位数。 如果精度丢失,则给出6位数字; 如果精度为零,则将其视为1.如果转换的指数小于-4或大于或等于精度,则使用样式e。 尾随零从结果的小数部分中移除; 只有在后跟至少一位数字时才会出现小数点。

它们都是浮点输入/输出的示例。

%g和%G是科学记数法浮点数%e和%E的简化符。

%g将采用可表示为%f(简单浮点数或双精度数)或%e(科学计数法)的数字,并将其作为两者中较短的一个返回。

print语句的输出将取决于sum的值。

正如Unwind指出f和g提供不同的默认输出。

粗略地说,如果你更关心小数点后面的细节,我会用f来做,如果你想缩放大数,请用g。 从一些尘土飞扬的回忆中,如果您的数字打印表格保持排列状态,那么f值非常小,但是如果您的数字变化越来越大并且您的布局很重要,则需要类似g的东西。 当你的数字往往非常小或非常大但从未接近十时,e更有用。

另一种方法是指定输出格式,以便每次都能获得代表数字的相同字符数。

很抱歉,但是这是一个主观的外出事物,如果生成的字符数很重要或者代表值的精确度,那么只能获得难以回答的答案。

%f和%g做同样的事情。 唯一的区别是%g是%f的较短forms。 也就是说,与%g相比,小数点后的精度%f更大