四舍五入大浮点数

时间:2019-06-03 20:16:20

标签: python numpy rounding

我正在实现Jacobian算法来查找给定矩阵的特征值。我的问题是浮点数如1.2335604410291751e + 216,我无法对它们进行四舍五入。

我尝试了np.around和round函数,但是它们没有用。

1 个答案:

答案 0 :(得分:0)

如果您只想对标准格式(m×bⁿ)的数字的 m 进行四舍五入,则可以这样操作,对于m,b和n,该数字为基数,和指数分别为:

import math

def round_(m, d, b = 10):
    n = math.floor(math.log(abs(m), b),)

    return float(round(m * (b ** (d - n))) * (b ** - (d - n)))

一些测试输出:

>>> print(round_(1.23456783456787434567e-22, 1))
1.2299999999999998e-22
>>> round_(-1.23456783456787434567e+159, 7)
-1.2345678e+159
>>> round_(1.23456783456787434567e+50, 6)
1.234568e+50
>>> round_(-0.23456783456787434567e+256, 5)
-2.34568e+255
>>> round_(1.23456783456787434567e+255, 4)
1.2346e+255
>>> round_(0.23456783456787434567e+272, 3)
2.346e+271
>>> round_(1.23456783456787434567e-23, 2)
1.235e-22
>>> round_(-1.23456783456787434567e+251, 1)
-1.2e+251

可能会发生溢出(请参阅输出#1)

使用Python 3.7测试。