#include <stdio.h>
int main()
{
double ans = 123.45;
printf("Printing using %%f %f\n",ans);
printf("Printing using %%e %e\n",ans);
printf("Printing using %%g %g\n\n\n",ans);
//
ans = 123.45e8; // scientific way of writing 123.45 * 10^8
printf("Printing using %%f %f\n",ans);
printf("Printing using %%e %e\n",ans);
printf("Printing using %%g %g\n\n\n",ans);
ans = 123.45e-8; // scientific way of writing 123.45 * 10^(-8) i,e. 0.0000012345
// %f has upto 6 digits precision
// 0.0000012345 converted to 0.000001 (max 6 precision allowed)
printf("Printing using %%f %f\n",ans);
printf("Printing using %%e %e\n",ans);
printf("Printing using %%g %g\n",ans);
return 0;
}
输出为:
Printing using %f 123.450000
Printing using %e 1.234500e+02
Printing using %g 123.45
Printing using %f 12345000000.000000
Printing using %e 1.234500e+10
Printing using %g 1.2345e+10
Printing using %f 0.000001
Printing using %e 1.234500e-06
Printing using %g 1.2345e-06
7条答案
按热度按时间eulz3vhy1#
它们都是浮点输入/输出的示例。
%g和%G是科学记数法浮点数%e和%E的简化符。
%g将接受一个可以表示为%f(一个简单的浮点数或双精度浮点数)或%e(科学记数法)的数字,并返回两者中较短的一个。
print语句的输出将取决于sum的值。
ig9co6j12#
请参阅任何参考手册,例如man page:
f,F
double参数被舍入并转换为[-]ddd.ddd样式的十进制表示法,其中小数点字符后的位数等于精度规范。如果精度缺失,则取6;如果精度显式为零,则不显示小数点字符。如果出现小数点,则小数点前至少会出现一位数字。(SUSv 2不知道F,并表示可以使用无穷大和NaN的字符串表示。C99标准指定'[-]inf'或'[-]infinity'表示无穷大,在f转换的情况下,指定以'nan'开头的字符串表示NaN,在F转换的情况下,指定'[-]INF'或'[-]INFINITY'或'NAN*'。
g,G
double参数转换为f或e样式(或G转换为F或E)。精度指定有效位数。如果精度缺失,则给出6位数字;如果精度为零,则将其视为1。如果转换后的指数小于-4或大于或等于精度,则使用样式e。从结果的小数部分去除尾随零;小数点只有在后面至少有一位数字时才会出现。
cngwdvgl3#
E =指数表达式,简单地表示幂(10,n)或10 ^ n
F =分数表达式,默认6位数精度
G =通用表达式,不知何故聪明地以简洁的方式显示数字(但真的吗?)
请参见下面的示例,
密码
输出
4zcjmb1e4#
正如Unwind指出的,f和g提供不同的默认输出。
粗略地说,如果你更关心小数点后的细节,我会用f来做,如果你想对大的数字进行缩放,就用g。从一些尘封的记忆中,f是非常好的小值,如果你的打印表的数字,因为一切都保持排队,但像g的东西是需要的,如果你站在一个变化,你的数字越来越大,你的布局问题。当你的数字很小或很大,但永远不会接近10时,e更有用。
另一种方法是指定输出格式,以便每次都获得相同数量的字符表示您的数字。
对不起,模糊的答案,但它是一个主观的东西,只有得到硬答案,如果生成的字符数是重要的或所表示的值的精度。
ma8fv8wu5#
%g删除浮点数中的尾随零,
打印(integer)到106,之后在e+中直到精度6
123456给出123456
1234567给出1.23457e+06
打印(float〉10-4)到精度6,之后舍入到pre。6
1.23456给出1.23456
1.234567给出1.23457
print(float〈10**-4)直到精度为4,否则为ne-0 p
0.0001得0.0001
0.000001给出1 e-06
0.12345678给出0.123457
%G做同样的事情,但是exp(e)变成exp(E)
wmomyfyw6#
所有三个格式说明符%e、%f和%g都用于处理C中的float和double数据类型。
%e
表示指数幂的数据(科学格式)。%f
以正常的十进制形式表示数据,最多可以保留6位小数,但您可以控制输出的小数位数。%g
表示十进制格式,并删除后续的零。如何在c代码中使用%e、%f和%g的示例:
输出为:
kcrjzv8t7#
%f和%g做同样的事情。唯一的区别是%g是%f的缩写形式。也就是说,%f中小数点后的精度大于%g