Python 的四捨五入

最近在學習 Python 程式,練習中偶而發現這件事。

在練習 NumPy 的時候,執行下面程式,發現結果不如自己預期。

import numpy as np
ary = np.array([ 5, 10, 15, 20, 25 ])
print(np.around(ary, -1))
# [ 0 10 20 20 20]

一般對於 round 解釋,是 四捨五入 ,不過在上面的程式中,最後一個位數 25 四捨五入到十位數的結果,卻是 20 而不是預想中會進位變為 30

猜想會不會是 NumPy 有不同計算方式,改用一般的 round 函數試試⋯

print( round(25, -1) )
# 20

結果一樣是 20

查了一下網路上的討論,說定義上 round 是取最接近的整數,並不是四捨五入。當上面的例子中,由於 25 距離 2030 一樣,Python 會取最近的 偶數 ,因此在 23 之間,取 偶數2 作為答案。

這是一個滿特別的規則,與自己在其它程式語言中的經驗不同,不知道它在計算上會有什麼影響,暫時作個記錄,強化自己的印象。