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

Meh*_*Meh 8 python floating-point formatting

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

>>> format(0.0001, "g")
'0.0001'
>>> format(0.00001, "g")
'1e-05'
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

cle*_*lel 9

我有同样的问题。

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

一般格式。对于给定的精度p >= 1,这会将数字四舍五入为p位有效数字,然后根据其大小将结果格式化为定点格式或科学记数法。

我不知道,为什么其他答案不使用它,而且我在Python方面的经验不是很丰富,但它确实有效。

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


Tho*_*s K 4

from math import log10

if log10(n) < -5:
    print "%e" % n
else:
    print "%f" % n
Run Code Online (Sandbox Code Playgroud)

编辑:也可以将其放在一行上:

("%e" if log10(n) < -5 else "%f") % n
Run Code Online (Sandbox Code Playgroud)

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

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

"%e" % n if n and log10(abs(n)) < -5 else ("%f" % n).rstrip("0")
Run Code Online (Sandbox Code Playgroud)

这会将 0 打印为“0”。——如果您想要其他表示形式,例如“0”或“0.0”,则需要使用单独的if.