numpy.round输出异常咨询:为何8.5会被舍入为8.0?
关于numpy中0.5舍入结果的解释
这不是numpy的问题,而是它默认采用了银行家舍入法(四舍六入五成双),这是国际上常用的舍入标准,核心规则如下:
- 舍去部分最高位小于5时,直接舍去;
- 舍去部分最高位大于5时,向前一位进1;
- 舍去部分最高位等于5时,若前一位是偶数则舍去,若前一位是奇数则进1(最终让结果为偶数)。
对应你的测试案例:
7.5:整数部分7是奇数,进1后得到偶数8.0;8.5:整数部分8是偶数,舍去0.5后保留8.0;0.5:整数部分0是偶数,舍去0.5后得到0.0。
如果需要传统的"四舍五入"(0.5一律进1),可以通过以下方式实现:
- 针对正数,使用
np.floor(x + 0.5):import numpy as np print(np.floor(8.5 + 0.5)) # 输出9.0 print(np.floor(7.5 + 0.5)) # 输出8.0 print(np.floor(0.5 + 0.5)) # 输出1.0 - 兼容正负数值的场景,可结合
np.sign封装函数:def traditional_round(x): return np.sign(x) * np.floor(np.abs(x) + 0.5)
内容的提问来源于stack exchange,提问作者Meenakshi Mittal
相关产品推荐
相关产品推荐

