成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

python 浮點數四舍五入需要注意的地方

瀏覽:4日期:2022-07-13 15:41:40

本文主要分享基于python的數據分析三方庫pandas,numpy的一次爬坑經歷,發現并分析了python語言對于浮點數精度處理不準確的問題,并在最后給出合理的解決方案。如果你也在用python處理數據,建議看一下,畢竟0.1的誤差都可能造成比較大的影響。

問題出現

早上到了公司,領導發了幾個文件過來,說這兩天測試環境跑出來的數據,與實際情況有所出入,看看哪出的問題,盡快解決···

開始排查

先對比數據,發現并不是所有的數據都出現問題,只有10%左右的數據有這個問題,說明應該不是邏輯上的問題,初步判斷可能為個別情況需要特殊處理,考慮不周導致檢查梳理各個運算模塊,用debug斷點調試一波,確定了數據出現偏差的模塊通過單獨測試這個單元模塊最終確定,涉及到兩數相除結果為0.5(浮點數)的地方有問題預期結果:np.round(0.5)=1,實際運算結果:np.round(0.5)=0,于是我做了如下的試驗

# 基于python3.7版本 >>> import numpy as np # 先看看 0 < x < 1 這個范圍的結果,發現有問題 >>> np.round(0.50) 0.0 >>> np.round(0.51) 1.0 >>> np.round(0.49) 0.0 # 我擔心是不是只有小數點為.5的都會呈現這種問題,所以測試了 x > 1的結果,發現還是有問題 >>> np.round(1.5) 2.0 >>> np.round(2.5) 2.0 >>> np.round(3.5) 4.0 >>> np.round(4.5) 4.0

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

分析問題

確實發現了關于浮點數(.5出現了理解上的偏差),看看官方文檔怎么解釋這個現象

numpy.around(a, decimals=0, out=None)[source] Evenly round to the given number of decimals. # 對于恰好介于四舍五入的十進制值之間的中間值(.5),NumPy會四舍五入為最接近的偶數值。 # 因此1.5和2.5四舍五入為2.0,-0.5和0.5四舍五入為0.0,依此類推。 For values exactly halfway between rounded decimal values, NumPy rounds to the nearest even value. Thus 1.5 and 2.5 round to 2.0, -0.5 and 0.5 round to 0.0, etc. # np.around使用快速但有時不精確的算法來舍入浮點數據類型。 # 對于正小數,它等效于np.true_divide(np.rint(a * 10 **小數),10 **小數), # 由于IEEE浮點標準[1]和 十次方縮放時引入的錯誤 np.around uses a fast but sometimes inexact algorithm to round floating-point datatypes. For positive decimals it is equivalent to np.true_divide(np.rint(a * 10**decimals), 10**decimals), which has error due to the inexact representation of decimal fractions in the IEEE floating point standard [1] and errors introduced when scaling by powers of ten

其實也就是說:對于帶有.5這種剛好介于中間的值,返回的是相鄰的偶數值 白話解釋:如果一個數字帶有浮點數(.5),整數部分為偶數,則返回這個偶數;整數部分奇數,則返回這個奇數+1的偶數 規律解釋:如果整數部分能夠整除2,則返回整數部分;如果整數部分不能整除2,則返回整數部分 +1

解決問題

先不做任何改動,看下數據誤差的情形

# 我們為了先看下現象,構造如下案例 import pandas as pd import numpy as np df = pd.DataFrame({'num1': [1, 1, 1.5, 5, 7.5], 'num2': [2, 3, 1, 6, 3]}) df['真實值'] = df['num1'] / df['num2'] # 看下round函數過后的結果 df['偏差值'] = np.round(df['num1'] / df['num2'])

原始結果圖片如下

python 浮點數四舍五入需要注意的地方

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

我的解決方案

我根據我的精度要求,構建精度范圍所需要保留的小數點的最后一位,通過這個數字是否為5,判斷是否需要向上取整 舉例來說,本案例中我只需要保留整數部分的數據,那么我只需要確定小數點后第一位是否是數字5就可以了

上代碼

import pandas as pd import numpy as np import math df = pd.DataFrame({'除數': [1, 1, 1.5, 5, 7.5], '被除數': [2, 3, 1, 6, 3]}) # 記錄真實值 df['真實值'] = df['除數'] / df['被除數'] # 記錄整數部分 df['輔助整數列'] = df['真實值'].apply(lambda x: math.modf(x)[1]) # 記錄小數部分,因為我的最后結果精度為只保留整數部分,所以我只需要保留一個小數點位進行判斷是否需要進位操作 df['輔助小數列'] = df['真實值'].apply(lambda x: str(math.modf(x)[0]).split('.')[1][0]) # 小數點后的第一位是為5,則向上取整,不是5則調用原np.round就行了 df['期望值修正'] = df.apply(lambda x: x.輔助整數列 + 1 if (x.輔助小數列 == '5') else np.round(x.真實值), axis=1)

結果如下所示

python 浮點數四舍五入需要注意的地方

以上就是python 四舍五入需要注意的地方的詳細內容,更多關于python 四舍五入的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美国产先锋| 国内精品美女在线观看| 成人av电影在线观看| 欧美性xxxxx极品少妇| 亚洲综合在线免费观看| 欧美xx69| 久久这里只有精品视频网| 裸体在线国模精品偷拍| 亚洲欧美成人综合| 亚洲日本丝袜连裤袜办公室| 欧美日韩第一区| 久久精品亚洲精品国产欧美kt∨ | 欧美亚洲国产一卡| 香蕉久久一区二区不卡无毒影院| 99精品国产福利在线观看免费| 中文字幕一区二区三区蜜月| 国产精品mm| 国产精品视频第一区| 欧美日韩精品伦理作品在线免费观看| 欧美xxx久久| 福利一区二区在线| 欧美一区二区精品在线| 国产麻豆精品theporn| 欧美日韩不卡一区二区| 激情另类小说区图片区视频区| 精品1区2区3区| 国产一区二区毛片| 欧美精品丝袜中出| 国产麻豆91精品| 欧美一区二区久久久| 成人一区在线观看| 欧美精品一区二区久久婷婷| 99国产精品久久久久久久久久 | 国产成人免费高清| 91精品午夜视频| 国产不卡免费视频| 久久亚洲精品小早川怜子| 91一区二区三区在线观看| 久久精品一区二区| 欧美日韩精选| 1000精品久久久久久久久| 亚洲精品在线视频观看| 亚洲一区日韩精品中文字幕| 免费日韩精品中文字幕视频在线| 亚洲gay无套男同| 在线观看精品一区| 国产麻豆精品theporn| 精品国产乱码久久久久久久| 欧美一区二区三区四区夜夜大片| 亚洲国产成人午夜在线一区| 在线观看的日韩av| 亚洲香肠在线观看| 久久一区欧美| 91久久夜色精品国产九色| 国产精品每日更新| 国产日产精品一区二区三区四区的观看方式 | 国产一区美女| 一区二区三区在线视频观看| 久久一区视频| 国产精品一二三四五| 久久久久成人黄色影片| 欧美午夜国产| 午夜免费欧美电影| 欧美视频完全免费看| 成人毛片视频在线观看| 日本一区二区免费在线| 99精品热视频只有精品10| 丝袜美腿亚洲一区二区图片| 欧美日韩在线不卡| 成人av免费在线| 亚洲色图色小说| 在线亚洲一区观看| 大白屁股一区二区视频| 中文字幕一区二区在线播放| 久久精品国产第一区二区三区最新章节 | 亚洲夂夂婷婷色拍ww47| 在线区一区二视频| 99热这里都是精品| 亚洲精选视频在线| 欧美性xxxxx极品少妇| 91小视频在线免费看| 亚洲欧美日韩国产中文在线| 91黄色激情网站| 91在线视频网址| 亚洲福利电影网| 精品国产乱码久久久久久久| 国产精品试看| 国产成人久久精品77777最新版本| 日本一区二区电影| 久久久久久久久久久久久久一区| 国产成人综合在线观看| 国产精品久久午夜| 欧美亚一区二区| 99久久精品免费| 亚洲一区二区在线播放相泽| 777欧美精品| 极品av少妇一区二区| 免费不卡在线视频| 国产欧美日韩另类一区| 色欧美88888久久久久久影院| 播五月开心婷婷综合| 亚洲一区二区美女| 欧美sm极限捆绑bd| 免费日韩精品中文字幕视频在线| 成人免费av资源| 亚洲香蕉伊在人在线观| 欧美精品一区二区三区蜜桃视频| 久久国产毛片| 91一区二区三区在线观看| 美女久久久精品| 综合av第一页| 制服丝袜亚洲网站| 亚洲一区三区电影在线观看| av亚洲精华国产精华| 日韩国产欧美在线视频| 欧美—级在线免费片| 欧美区一区二区三区| 日韩午夜视频在线观看| 成人av在线播放网址| 日本视频免费一区| 成人欧美一区二区三区小说| 日韩欧美一卡二卡| 色婷婷综合中文久久一本| 午夜国产精品视频免费体验区| 精品无人码麻豆乱码1区2区 | 在线视频一区二区三| 国内精品久久久久久久果冻传媒| 国产在线播精品第三| 亚洲大片免费看| 欧美国产日韩一二三区| 欧美美女黄视频| 日韩午夜免费| 欧美日韩一区二区视频在线观看| 国产美女精品一区二区三区| 性做久久久久久久久| 亚洲欧美一区二区在线观看| 欧美mv日韩mv| 欧美日韩国产综合一区二区三区| 国产精品普通话对白| 欧美另类女人| 成人精品一区二区三区四区| 日本aⅴ亚洲精品中文乱码| 亚洲乱码精品一二三四区日韩在线 | 欧美日本一区| 成a人片国产精品| 麻豆国产精品777777在线| 一区二区三区四区蜜桃 | 777午夜精品免费视频| 日本精品一级二级| 亚洲视频二区| 亚洲电影成人| 暖暖成人免费视频| 粉嫩蜜臀av国产精品网站| 久久99国产精品麻豆| 亚洲国产精品视频| 久久久三级国产网站| 欧美高清dvd| 欧美无人高清视频在线观看| 噜噜噜在线观看免费视频日韩| 激情成人综合| 欧美 日韩 国产精品免费观看| 成人黄色电影在线 | 先锋影音久久久| 国产日韩精品视频一区二区三区| 欧美一区二区三区在线免费观看| 国产91精品一区二区麻豆亚洲| 韩国精品一区二区| 日韩高清在线电影| 亚洲成人免费看| 亚洲综合清纯丝袜自拍| 亚洲免费看黄网站| 亚洲男同性恋视频| 一区二区三区中文免费| 亚洲黄色免费网站| 一区二区三区在线免费播放 | 亚洲精品国产a| 日韩美女精品在线| 国产视频911| 久久综合丝袜日本网| www国产成人| 精品久久国产老人久久综合| 日韩欧美中文字幕制服| 欧美一区二区三区免费视频| 91精品国产黑色紧身裤美女| 日韩一区二区在线观看| 日韩一区二区在线观看视频| 日韩一区二区三区三四区视频在线观看| 欧美日韩三级一区二区| 欧美日韩综合在线| 欧美日韩专区在线| 91精品国模一区二区三区| 8x福利精品第一导航| 欧美大肚乱孕交hd孕妇| 日韩美女视频在线| 久久精品一区二区三区不卡牛牛 | 成人小视频在线| 91日韩精品一区| 亚洲高清激情| 久久精品女人| 欧美日韩在线免费视频|