看了一圈高贊回答,居然沒人提這個。
大家都知道,round()是用來四捨五入的。
但是,有特殊情況:
發現問題了嗎?
7.55保留一位小數,按四捨五入,應該得7.6,卻得到7.5
1.315保留兩位小數,按四捨五入,應該的1.32,卻得到1.31
因為,Python遵循的不是四捨五入,而是“四捨六入五成雙”
Python官方文檔:
round介紹:內置函數 — Python 3.10.5 文檔
浮點算術的爭議和限制:15. 浮點算術:爭議和限制 - Python 3.10.5 文檔
為此,我專門寫了一個函數,修復此問題(如果算作是問題):
def new_round(v_value, ndigits=1):
"""
修復python四捨五入問題
:param ndigits: 保留幾位小數
:param v_value: 輸入數值
:return: 輸出數值
"""
f = int(v_value) % 10
if f <= 4:
v_value = (int(v_value) // 10) / 10
else:
v_value = (int(v_value) // 10 + 1) / 10
print(v_value)
return v_value
暫且不論它算不算Python的bug,但你一定要知曉這個事。
別讓你的程序,由於它,計算出錯誤結果,自己卻渾然不知!
到那個時候,就算不是python的bug,也是你的程序bug了!!
Python 有什麼不為人知的坑? - 知乎 | 馬哥python說
我是馬哥,全網累計粉絲上萬,歡迎一起交流python技術。
各平台搜索“馬哥python說”:知乎、哔哩哔哩、小紅書、新浪微博。