程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

Python 有什麼不為人知的坑?關於python裡的round函數的四捨五入問題

編輯:Python

看了一圈高贊回答,居然沒人提這個。

大家都知道,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說”:知乎、哔哩哔哩、小紅書、新浪微博。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved