Python round() 函数理论上会将负数舍入到小数点左侧的位置。[ 即四舍五入(150, -2) => 200]
但是,它似乎非常容易受到浮点误差的影响。
例如,给定一个很大的数字,比如 2e25,它会给出奇怪的结果。
2e25 ===
200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000但是,round(2e25, -23) 给出的值如下20000000000000000273942742
当它应该只是得到
20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000我知道有一个格式化功能,就像这个线程一样:Python 中的 round() 似乎没有正确舍入
但是,这似乎仅适用于向小数点右侧舍入。 我错了吗? 有没有其他方法可以做到这一点? 试图正确计算非常令人沮丧。
谢谢!
问题是 2e25 实际上并不等于 20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>>> 2e25 == 20000000000000000000000000
False
>>> 2e25 == 20000000000000001811939328
True
float
类型没有足够的精度来精确表示如此大的整数。除非您有充分的理由使用浮点值,否则请改用整数。