Python中的`G`类型字符串格式化是如何工作的?

7

阅读

gG转换类型根据指数的大小和为.<precision>指定的值选择浮点或指数输出。如果指数小于-4或不小于.<precision>,则输出与e/E相同。否则,输出与f/F相同:

同时,“如果指数小于-4或不小于.<precision>”这句话我没有理解。在哪里明确指定了指数?通过“指数”,是指小数点后的位数吗?我认为是这样的,因为当我尝试在小数点后保留四个数字时,它将其打印为f,但当我尝试在小数点后保留五个数字时,它将其打印为e

>>> '%g' % 0.0003
'0.0003'
>>> '%g' % 0.00003
'3e-05'

问题1. 我对上面的理解正确吗?

问题2. 但是,我不明白为什么在下面的例子中它没有做同样的事情:

>>> '%g' % 3.14
'3.14'
>>> '%g' % 3.014
'3.014'
>>> '%g' % 3.0014
'3.0014'
>>> '%g' % 3.00014
'3.00014'
>>> '%g' % 3.000014
'3.00001'
>>> '%g' % 3.0000014
'3'

问题3. 最后,我没有理解 "如果指数小于-4或不少于.<precision>" 部分的含义。我尝试明确指定小于和大于小数点后4位的精度。但它仍然打印出相同的结果:

>>> '%g' % 0.00003
'3e-05'
>>> '%.3g' % 0.00003
'3e-05'
>>> '%.9g' % 0.00003
'3e-05'
2个回答

0

"Exponent"指的是小数点后的数字位数吗?

不是。指数简单来说就是科学计数法中e之后的数字,例如0.999可能会被表示为9.990000e-01,这意味着0.999的指数为-1。指数值告诉我们关于数量级的信息。


0

根据C11标准:

表示浮点数的double参数将以样式fe(或在G转换说明符的情况下以样式FE)进行转换,具体取决于所转换的值和精度。如果精度不为零,则让P等于精度;如果省略了精度,则让P等于6;如果精度为零,则让P等于1。然后,如果使用样式E进行转换,则指数为X

     如果P > X ≥ −4,则转换采用样式f(或F),精度为P - (X + 1)
     否则,转换采用样式e(或E),精度为P - 1。

表示无穷大或NaN的double参数将以fF转换说明符的样式进行转换。

同样来自Python文档,对于相同行为的另一个描述如下:

通用格式。对于给定精度 p >= 1, 将数字舍入到 p 个有效数字,然后根据其大小在固定点格式或科学计数法中格式化结果。
具体规则如下:假设使用演示类型 'e' 和精度 p-1 格式化的结果将具有指数 exp。那么如果 -4 <= exp < p,则使用演示类型 'f' 和精度 p-1-exp 格式化数字。否则,使用演示类型 'e' 和精度 p-1 格式化数字。在两种情况下,都会从有效数字中删除无关紧要的尾随零,并且如果没有剩余数字,则也会删除小数点。
正无穷大、负无穷大、正零、负零和 NaN 分别格式化为 inf-inf0-0nan,无论精度如何。
精度为 0 被视为等同于精度为 1。默认精度为 6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接