您現在的位置是:首頁 > 棋牌

如何使用python進行正確的四捨五入?這個坑有點大

  • 由 技頑 發表于 棋牌
  • 2022-01-30
簡介如果整數部分不能整除2,則返回整數部分 +104解決問題先不做任何改動,看下資料誤差的情形原始結果圖片如下不做處理,期望值和偏差值不等的情況出現我的解決方案我根據我的精度要求,構建精度範圍所需要保留的小數點的最後一位,透過這個數字是否為5,

四舍五進什麼意思

本文主要分享基於python的資料分析三方庫pandas,numpy的一次爬坑經歷,

發現並分析了python語言對於浮點數精度處理不準確的問題

,並在最後給出合理的解決方案。如果你也在用python處理資料,建議看一下,畢竟0。1的誤差都可能造成比較大的影響

如何使用python進行正確的四捨五入?這個坑有點大

01

發現問題

早上到了公司,領導發了幾個檔案過來,說這兩天測試環境跑出來的資料,與實際情況有所出入,看看哪出的問題,儘快解決……

02

開始排查

先對比資料,發現並不是所有的資料都出現問題,只有10%左右的資料有這個問題,說明

應該不是邏輯上的問題,初步判斷可能為個別情況需要特殊處理,考慮不周導致

檢查梳理各個運算模組,

用debug斷點除錯一波,確定了資料出現偏差的模組

透過單獨測試這個單元模組最終確定,

涉及到兩數相除結果為0.5(浮點數)的地方有問題

預期結果:np.round(0.5)=1,實際運算結果:np.round(0.5)=0

,於是我做了如下的試驗

如何使用python進行正確的四捨五入?這個坑有點大

透過對比,發現確實涉及到。5的值會有些和預想的不同,看看啥原因

03

分析問題

確實發現了關於浮點數(。5出現了理解上的偏差),看看

官方文件怎麼解釋這個現象

如何使用python進行正確的四捨五入?這個坑有點大

其實也就是說:

對於帶有.5這種剛好介於中間的值,返回的是相鄰的偶數值

白話解釋:

如果一個數字帶有浮點數(.5),整數部分為偶數,則返回這個偶數;整數部分奇數,則返回這個奇數+1的偶數

規律解釋:

如果整數部分能夠整除2,則返回整數部分;如果整數部分不能整除2,則返回整數部分 +1

04

解決問題

先不做任何改動,看下資料誤差的情形

如何使用python進行正確的四捨五入?這個坑有點大

原始結果圖片如下

如何使用python進行正確的四捨五入?這個坑有點大

不做處理,期望值和偏差值不等的情況出現

我的解決方案

我根據我的精度要求,構建

精度範圍所需要保留的小數點的最後一位

,透過這個數字是否為5,判斷是否需要向上取整

舉例來說,本案例中

我只需要保留整數部分的資料,那麼我只需要確定小數點後第一位是否是數字5就可以了

上程式碼

如何使用python進行正確的四捨五入?這個坑有點大

結果如下所示

如何使用python進行正確的四捨五入?這個坑有點大

期望修正值已經達成

我是一名奮戰在程式設計界的pythoner,工作中既要和資料打交道,也要和erp系統,web網站保持友好的溝通……,時不時的會分享一些提高效率的程式設計小技巧,在實際應用中遇到的問題以及解決方案,或者原始碼的閱讀等等,歡迎大家一起來討論!如果覺得寫得還不錯,歡迎點個關注點個贊,謝謝。

Top