我很惊讶地发现np.round(item, decimals=0)
轮次14.50
到14
。我知道这与小数点的数量有关,但我不确定原因。
如何确保14.50
之类的数字始终向上舍入15
?
脚本:
myval = 14.50
np.round(myval, decimals=0)
输出:
14.0
答案 0 :(得分:3)
如果您使用的是2.x,则默认的python round function应该为正浮动执行所需的操作。
>>> round(14.5)
15.0
>>> round(14.49)
14.0
不确定最佳做法是什么,但这适用于数据帧和python 2.x:
df = pd.DataFrame([1.5,2.5,3.5])
rounded_df = df.applymap(round)
注意python 2.x的舍入为零,因此它将向下舍入负数。
答案 1 :(得分:2)
numpy rounds to even,这意味着,如果小数部分正好是0.5,则数字被向上舍入,如果整个部分是奇数并向下舍入,如果整个部分是偶数。
答案 2 :(得分:2)
来自等效函数np.around
的文档:
对于正好在舍入小数值之间的值,Numpy会舍入到最接近的偶数值。因此,由于IEEE浮点标准[R9]中的小数部分的不精确表示以及当以10的幂进行缩放时引入的误差,结果也可能是令人惊讶的1.5和2.5轮到2.0,-0.5和0.5轮到0.0等。
出于这个原因,np.round
将14.5减少到14,而不是奇数15。
如果您只想要舍入为整数,则可以改为使用np.ceil
:
>>> np.ceil(14.5)
15.0
答案 3 :(得分:0)
我知道这是一个老问题,但我想我也有一个可以做你想做的答案。
您可以使用:
>>> np.int32(14.5+0.5)
15