我使用"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"
并剥离尾随零,但之后我将无法看到需要科学记数法的小数字。
答案 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'
然后,您可以动态指定number
和width
所需的值。
答案 2 :(得分:3)
我有同样的问题。
查看 Python 文档,似乎 g 也支持精度值:
一般格式。对于给定的精度 p&gt; = 1 ,这将围绕 编号为 p 有效数字,然后格式化结果 固定点格式或科学记数法,取决于它 大小
我不知道,为什么其他答案不使用这个,我在 Python 中不是很有经验,但是它有效。
这可以通过使用format(0.00001, '.10g')
来实现,其中10是您想要的精度。