在 Python 中对非常大的数字进行舍入(小数点左侧)



Python round() 函数理论上会将负数舍入到小数点左侧的位置。[ 即四舍五入(150, -2) => 200]

但是,它似乎非常容易受到浮点误差的影响。

例如,给定一个很大的数字,比如 2e25,它会给出奇怪的结果。

2e25 ===

200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

但是,round(2e25, -23) 给出的值如下20000000000000000273942742

当它应该只是得到

20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

我知道有一个格式化功能,就像这个线程一样:Python 中的 round() 似乎没有正确舍入

但是,这似乎仅适用于向小数点右侧舍入。 我错了吗? 有没有其他方法可以做到这一点? 试图正确计算非常令人沮丧。

谢谢!

问题是 2e25 实际上并不等于 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

>>> 2e25 == 20000000000000000000000000
False
>>> 2e25 == 20000000000000001811939328
True

float 类型没有足够的精度来精确表示如此大的整数。除非您有充分的理由使用浮点值,否则请改用整数。

最新更新