Python浮动格式 - 如“g”,但有更多数字

时间:2011-01-07 14:16:32

标签: python formatting floating-point

我使用"g"来格式化浮点值,但是我很快就会切换到科学格式 - 第5位:

>>> format(0.0001, "g")
'0.0001'
>>> format(0.00001, "g")
'1e-05'

这似乎在"g"规则(-4)中描述:

  

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

有没有办法显示"g"之类的数字,但在切换到科学记数法之前会有更多数字?

我正在考虑使用".6f"并剥离尾随零,但之后我将无法看到需要科学记数法的小数字。

3 个答案:

答案 0 :(得分:3)

from math import log10

if log10(n) < -5:
    print "%e" % n
else:
    print "%f" % n

编辑:也可以把它放在一行:

("%e" if log10(n) < -5 else "%f") % n

如果n可能为负数,则使用log10(abs(n))代替log10(n)

编辑2:根据Adal的评论改进:

"%e" % n if n and log10(abs(n)) < -5 else ("%f" % n).rstrip("0")

这将打印0为“0”。 - 如果你想要另一个表示,如“0”或“0.0”,你需要特殊情况下单独if

答案 1 :(得分:3)

如果您使用的是Python 2.7,则可以使用高级字符串格式mini-language执行以下操作:

>>> '{number:.{width}f}'.format(number=0.000000000001, width=20)
'0.00000000000100000000'

然后,您可以动态指定numberwidth所需的值。

答案 2 :(得分:3)

我有同样的问题。

查看 Python 文档,似乎 g 也支持精度值:

  

一般格式。对于给定的精度 p&gt; = 1 ,这将围绕   编号为 p 有效数字,然后格式化结果   固定点格式或科学记数法,取决于它   大小

我不知道,为什么其他答案不使用这个,我在 Python 中不是很有经验,但是它有效。

这可以通过使用format(0.00001, '.10g')来实现,其中10是您想要的精度。