四舍五入大指数数,例如(6.624147...e+25 到 6.62e+25)

Rounding large exponential numbers e.g. (6.624147...e+25 to 6.62e+25)

我有一个需要四舍五入的非常大的数字列表。 例如:

6.624147027484989e+25 我需要四舍五入到 6.62e25.

但是,np.aroundmath.ceilinground() 等都不起作用。我在想,因为不是将 6.624147027484989e+25 舍入到 6.62e25,它只是使它成为一个整数,而我实际上需要使整个数字小得多......如果这有意义的话。

我想,如果我正确理解你的问题,你可以使用 float("%.2e" % x)

这只是将值转换为文本,采用指数格式,有两个小数位(因此 'pi' 将变为 "3.14e+00"),然后将其转换回浮点数。它适用于您的示例,以及像 5.42242344e-30

这样的小数字

对于 python 3.6+,最好使用 float(f"{x:.2e}") - 谢谢@gabriel-jablonski

  • 你可以使用python字符串格式来四舍五入。
i = 6.624147027484989e+25
new_i = float('{:0.2e}'.format(i))
print(new_i)

输出:

6.62e+25

更多字符串格式参考:https://docs.python.org/3.4/library/string.html#string-formatting

如果您想更改数字但保留类型(目前所有其他答案都将其转换为字符串)或一个 numpy 类型数组,您可以执行类似的操作,

$ ipython
Python 3.6.8 (default, Oct  7 2019, 12:59:55)
Type 'copyright', 'credits' or 'license' for more information
IPython 7.6.1 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import numpy as np

In [2]: num = 6.624147027484989e+25

In [3]: np.around(num, decimals=-24)
Out[3]: 6.6e+25

In [4]: np.around(num, decimals=-23)
Out[4]: 6.619999999999999e+25

虽然现在你不得不担心数值精度。