将指数形式的浮点数四舍五入为两位小数。

14

我想在Python中将指数形式的浮点数四舍五入到两位小数。

4.311237638482733e-91 --> 4.31e-91

你知道任何快速的方法来处理这个吗?
round(float, 2)"%.2f"%float 这样简单的解决方案不适用于指数形式的浮点数:/

编辑: 这不是关于舍入浮点数,而是关于舍入指数浮点数,因此它与如何将数字舍入到 Python 中的有效数字不是同一个问题。


3
"%.3g" % 4.311237638482733e-91 --> '4.31e-91'。f不是格式化浮点数的唯一方式。请参见此处。另外,str.format更加强大。 - Bakuriu
3
4.31e-91 - Ashwini Chaudhary
谢谢您的快速回答! - Leszek
@Bakuriu,我很高兴接受您的评论作为答案,但您需要将其编写为答案;) - Leszek
@Leszek 我没有立即回答,因为这个问题被关闭为重复问题,我不想在进一步检查之前立即重新打开它...然后我就忘了 :) - Bakuriu
1个回答

20
您可以使用g格式说明符,它基于精度选择指数和“常规”表示法,并指定有效数字的数量:
>>> "%.3g" % 4.311237638482733e-91
'4.31e-91'

如果你想一直用指数表示数字,可以使用e格式说明符,而f则绝不使用指数表示法。完整的说明列表在这里

另外请注意,除了%风格的格式化之外,您还可以使用str.format

>>> '{:.3g}'.format(4.311237638482733e-91)
'4.31e-91'

str.format% 格式化方式更强大和可定制,并且更加一致。例如:

>>> '' % []
''
>>> '' % set()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>> ''.format([])
''
>>> ''.format(set())
''

如果你不喜欢在字符串字面值上调用方法,可以使用内置函数format:
>>> format(4.311237638482733e-91, '.3g')
'4.31e-91'

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