此代码
np.uint32( 1.13*100 )
返回112
应该是113.
如何绕过奇怪的舍入问题并让它返回113?
我正处于numpy 1.9.1
答案 0 :(得分:4)
如果可以避免,请不要将浮点乘法的结果直接转换为整数。转换不会将数字四舍五入到最接近的整数,它只会丢弃浮点数的小数部分。
问题是浮点数通常只是实数的近似值。算术运算可能会加剧差异。在您的示例中:
>>> 1.13*100
112.99999999999999
小数部分在转换为整数时被删除,留下112
。
最好先将数字舍入到最接近的整数(例如,使用np.round
),然后将其转换为整数类型:
>>> np.int32(np.round(1.13*100))
113