Python的舍入问题

时间:2015-02-02 20:14:31

标签: python numpy rounding

此代码

np.uint32( 1.13*100 )

返回112

应该是113.

如何绕过奇怪的舍入问题并让它返回113?

我正处于numpy 1.9.1

1 个答案:

答案 0 :(得分:4)

如果可以避免,请不要将浮点乘法的结果直接转换为整数。转换不会将数字四舍五入到最接近的整数,它只会丢弃浮点数的小数部分。

问题是浮点数通常只是实数的近似值。算术运算可能会加剧差异。在您的示例中:

>>> 1.13*100
112.99999999999999

小数部分在转换为整数时被删除,留下112

最好先将数字舍入到最接近的整数(例如,使用np.round),然后将其转换为整数类型:

>>> np.int32(np.round(1.13*100))
113