为什么%e在格式字符串中的行为与%g不同?

ste*_*fen 1 c python format-specifiers

我在Python2,Python3和C中尝试过这个:

为什么这些格式字符串返回不同精度的数字?

>>> "%.3e" % 123456789
'1.235e+08' 
>>> "%.3g" % 123456789
'1.23e+08' 
Run Code Online (Sandbox Code Playgroud)

Dal*_*ers 7

从python文档:

'e'指数表示法.使用字母"e"以科学记数法打印数字以表示指数.默认精度为6.


'g'
一般格式.对于给定的精度p> = 1,这将数字舍入为p有效数字,然后根据其大小以定点格式或科学计数形式对结果进行格式化.

精确的规则如下:假设用表示类型'e'和精度p-1格式化的结果将具有指数exp.然后,如果-4 <= exp <p,则使用表示类型"f"和精度p-1-exp格式化数字.否则,使用表示类型"e"和精度p-1格式化数字.在这两种情况下,从有效数字中删除无关紧要的尾随零,如果后面没有剩余数字,则也会删除小数点.

无论精度如何,正负无穷大,正零和负零以及nans分别被格式化为inf,-inf,0,-0和nan.

精度0被视为等于1的精度.默认精度为6.

使用替代值:

>>> "%.3e" % 123
'1.230e+02'
>>> "%.3g" % 123
'123'
>>> "%.3e" % 1234
'1.234e+03'
>>> "%.3g" % 1234
'1.23e+03'
Run Code Online (Sandbox Code Playgroud)

然后,差异显然在于如何指定精度.g似乎使用精度作为精度的正常定义,而e使用小数点的数字.