Python round()函数理论上会将负数舍入到小数点左边的位置。 [即。圆(150,-2)=> 200]
但是,它似乎非常容易受到浮点错误的影响。
例如,如果大量说2e25,则会产生奇怪的结果。
2e25 === 20000000000000000000000000
但是,round(2e25,-23)给出了类似的值 20000000000000000273942742
何时才应该获得20000000000000000000000000
我知道有一个格式化函数,这个线程: round() in Python doesn't seem to be rounding properly
但是,这似乎只适用于四舍五入右边的舍入。我错了吗?还有另一种方法吗?试图让数学运算正确非常令人沮丧。
谢谢!
答案 0 :(得分:2)
问题在于2e25实际上并不等于20000000000000000000000000。
>>> 2e25 == 20000000000000000000000000
False
>>> 2e25 == 20000000000000001811939328
True
float
类型没有足够的精度来准确表示这么大的整数。除非您有充分的理由使用浮点值,否则请使用整数。