C printf中%g的奇怪输出

C printf中%g的奇怪输出,c,printf,C,Printf,据我所知,%g在printf中的转换规则是,如果指数小于-4或大于或等于精度,则使用%e或%e;否则请使用%f。不打印尾随零和尾随小数点 然而,下面的输出非常奇怪: printf("%g %G\n", 10.123456789, 10.12345); // output: 10.1235 10.1235 因为%g的精度是6,我猜它会输出1.012346e+01,但它不会。谁能帮我理解这一点?来自: 如果不为零,则p等于精度;如果未指定精度,则p等于6;如果未指定精度,则p等于1​0​. 然后,

据我所知,
%g
printf
中的转换规则是,如果指数小于
-4
或大于或等于精度,则使用
%e
%e
;否则请使用
%f
。不打印尾随零和尾随小数点

然而,下面的输出非常奇怪:

printf("%g %G\n", 10.123456789, 10.12345); // output: 10.1235 10.1235
因为
%g
的精度是6,我猜它会输出
1.012346e+01
,但它不会。谁能帮我理解这一点?

来自:

如果不为零,则p等于精度;如果未指定精度,则p等于6;如果未指定精度,则p等于1​0​. 然后,如果样式为E的转换的指数为X:

  • 如果P>X≥ −4、转换方式为f或f,精度为P− 1.− 十,
  • 否则,将使用样式e或e和精度P进行转换− 1.
由于使用默认精度,因此
p
等于
6
。指数
X
1
。这意味着
P>X≥ −4
为真(
6>1≥ −4
),输出用
f
(或
f
)说明符和精度
6-1-1
(等于
4
,是您看到的精度)打印

简而言之,输出实际上就是它应该是的样子。

来自:

如果不为零,则p等于精度;如果未指定精度,则p等于6;如果未指定精度,则p等于1​0​. 然后,如果样式为E的转换的指数为X:

  • 如果P>X≥ −4、转换方式为f或f,精度为P− 1.− 十,
  • 否则,将使用样式e或e和精度P进行转换− 1.
由于使用默认精度,因此
p
等于
6
。指数
X
1
。这意味着
P>X≥ −4
为真(
6>1≥ −4
),输出用
f
(或
f
)说明符和精度
6-1-1
(等于
4
,是您看到的精度)打印


简而言之,输出实际上就是它应该的样子。

printf(“%g%E\n
…)。请阅读printf@l“L'L你是什么意思?关于
输出:10.1235 10.1235
,有什么奇怪的地方吗?@kameiha:在选择精度(例如
printf()%.2e%.23E\n“
)…我不小心在那里留下了
g
的第一条评论…意思是
e
printf(“%g%e\n
))。请阅读printf@l'L'L你是什么意思?关于
输出:10.1235 10.1235
,有什么很奇怪的地方吗?@kameiha:你应该能够使用
e
,或
E
。。。在选择精度时(例如,
printf(“%.2e%.23E\n”)
)。。。我第一次不小心把
g
放在那里的评论。。。意思是
e
。谢谢,我以前误解了
%g
。谢谢,我以前误解了
%g