pandas列值保留兩位小數失敗問題

2021-10-14 23:12:00 字數 1806 閱讀 5518

專案中測試人員反饋資料計算錯誤,經過定位發現是基礎資料資料庫中保留了6位,但是實際顯示在頁面中是保留兩位小數,其中有乙個欄位是經過其他計算得到的,計算時未保留小數字。導致數字最後一位有問題。比如 a = 1.3657;b = 2.3556;c = 2.365;d = a +b+c;d =6.0836,當在頁面顯示時,a = 1.37;b=2.36;c=2.37;d = 6.09;而a+b+c = 6.10。類似這種情況。

遇到這個問題,當時有兩種解決方法,一種是在頁面取資料時,全部進行一次處理,然後重新計算d,這樣頁面顯示的資料肯定沒有問題;另一種就是從根本解決,在基礎資料處理時就全部保留兩位小數,後面考慮了下,選擇了第二種,因為這樣只需要修改底層基礎資料處理就可以了。

由於基礎資料處理那塊功能是用python語言開發的,所以就有文章標題的問題。基礎資料主要通過pandas庫進行計算處理。簡單問了下度老師,最後選擇了pandas.round()方法。

pandas.dataframe.round(decimals )

decimals : int, dict, series

簡單寫了乙個測試發現非常好用,如下面這個:

df = pd.dataframe(

)print

(df)

df['c']

= df[

'a']

.mul(df[

'b']

) df = df.

round()

print

(df)

得到結果

d:\svn_project\flaskproject\venv\scripts\python.exe d:

/svn_project/flaskproject/test.py

a b c

01.55

2.0301

2.43

6.9802

3.14

7.4103

4.67

8.32

0 a b c

01.6

2.03

3.15

12.4

6.98

16.96

23.1

7.41

23.27

34.7

8.32

38.85

但是拿到具體專案中發現怎麼都沒有起作用,保留在資料庫中的資料還是多位。如下圖

怎麼除錯都不起作用。苦惱了好久,後面終於發現f12_2008,f13_2008的列值資料型別不一致如下面

pandas.round()不能處理資料型別為object型別的資料。

這樣就比較好辦了,在保留小數字時,先將object型別資料轉換為float型別,這樣資料就能處理成功了,哈哈哈哈哈哈~~~~~

invest_pd[

'f13_2008'

]= pd.to_numeric(invest_pd[

'f13_2008'

], errors=

'coerce'

)

這麼簡單問題,困擾了一天,終於解決了,記錄下。

保留兩位小數

1.只要求保留n位不四捨5入 float f 0.55555f int i int f 100 f float i 1.0 100 2.保留n位,四捨五入 decimal d decimal.round decimal.parse 0.55555 2 3.保留n位四捨五入 math.round 0....

保留兩位小數

num 10.4567 第一種 利用round 對浮點數進行四捨五入 echo round num,2 第二種 利用sprintf格式化字串 format num sprintf 2f num echo format num 第三種 利用千位分組來格式化數字的函式number format echo...

保留兩位小數

js保留兩位小數例子 四捨五入使用函式 tofixed php保留兩位小數例子 四捨五入 1.number format 通過千位分組來格式化數字。該函式支援乙個 兩個或四個引數 不是三個 number 1234.5678 nombre format francais number format n...