这是对
g
/
G
C11标准中的说明符:
一
双重的
表示浮点数的参数是
已转换为样式
f
或
e
(或风格)
F
或
E
如果是
G
转换说明符),取决于转换的值和
精度。让
磷
如果不为零,则等于精度;如果精度为
省略,如果精度为零,则为1。然后,如果转换为
风格
e
会有指数
X
:
如果
磷
gt;
X
__4,转换为
带风格
f
(或)
f
)和精度
P_(X+1)
.
否则,
转换带有样式
e
(或)
e
)和精度
磷
1。
最后,除非
这个
γ
使用标志,从分数中删除所有尾随零
如果
没有剩余的小数部分。
一
双重的
论点
表示无穷大或NaN的样式转换为
f
或
f
转换说明符。
这种行为有点类似于简单地使用
%f
和
%e
,但不等同。有两个重要区别:
-
尾随零(可能还有小数点)在使用时会被去除
%g
,这会导致
%g
说明符将不完全匹配
任何一个
%F
或
%E
会产生的。
-
是否使用的决定
%F
-风格或
%E
-样式格式完全基于在
%E
-样式符号,并且
不
直接取决于哪种表述会更短。有几种情况会导致此规则
%g
选择较长的表示,如问题中所示
%g
使用科学记数法,即使这使输出比需要的长4个字符。
如果C标准的措辞难以解析,则
Python documentation
提供对相同行为的另一种描述:
常规格式。对于给定的精度
p
>=
1
,
这将数字四舍五入为
p
有效数字和
然后将结果格式化为固定点格式
或以科学记数法,视其大小而定。
具体规则如下:假设
使用演示文稿类型格式化的结果
'e'
和
精度
p-1
会有指数
exp
. 然后
如果
-4
<=
exp
<
p
,数字已格式化
带演示文稿类型
'f'
精密度
p-1-exp
. 否则,数字将被格式化。
带演示文稿类型
“e”
精密度
P-1
.
在这两种情况下,无意义的尾随零都会被删除。
从有效位开始,小数点也是
如果后面没有剩余数字,则删除。
正负无穷大,正负无穷大
零和NaN的格式为
inf
,
-inf
,
0
,
-0
和
nan
分别,不管
精度。
精度
零
被视为等同于
精度
1
. 默认精度为
6
.
互联网上的许多消息来源声称
%g
从中选出最短的
%E
和
%F
是完全错误的。