Python浮點數精度損失解決辦法

2021-09-26 03:05:34 字數 1309 閱讀 5767

筆者在有一次需要提取乙個浮點數的每一位時,出現下面情況:

a =

56.76

bit_1 =

int(a/10)

a = a %

10bit_2 =

int(a/1)

a = a %

1bit_3 =

int(a/

0.1)

a = a %

0.1bit_4 =

int(a/

0.01

)print

(bit_1,bit_2,bit_3,bit_4)

結果為:

5 6 7 5
很奇怪,結果應該是5 6 7 6,最後一位卻變成了5。

我們逐行列印結果來一**竟

>>

> a =

56.76

>>

> a = a %

10>>

> a

6.759999999999998

>>

>

相比看到這裡大家就明白了,原來是使用浮點數導致的精度問題。

使用round()方法發將精度較高的浮點數四捨五入為精度較低的浮點數即可。

>>

> a

6.759999999999998

>>

> a =

round

(a,2

)>>

> a

6.76

#每一次對a進行取模運算後,矯正一次小數字數

a =56.76

bit_1 =

int(a/10)

a = a %

10a =

round

(a,2

)bit_2 =

int(a/1)

a = a %

1a =

round

(a,2

)bit_3 =

int(a/

0.1)

a = a %

0.1a =

round

(a,2

)bit_4 =

int(a/

0.01

)print

(bit_1,bit_2,bit_3,bit_4)

567

6#得到正確結果

如果確實需要超過17位的精度,可以使用decimal模組配合getcontext方法,感興趣可以自行了解。

浮點數精度問題

一 例子 首先我們去編譯器試試 double a 1.9 通過新增監視檢視a的值 會發現a的值是1.8999999 二 開始今天的學習 在最開始學c 的時候並沒有對浮點數進行很深入的學習,認為浮點不就是小數嘛,首先在c 的巨集裡面有 flt max 和 flt min 的定義,float是四位元組的...

浮點數精度之謎

話要從業務 裡的bug說起,大致過程是前端運算 2.07 1 之後結果卻是1.0699999999999998,老司機們都知道是浮點數運算的精度丟失導致的,在檢視了下具體 果然處理不當。因此我深究一番,並誕生了此文。此處重點強調兩個認識誤區 首先不得不說說浮點數的表示方法,任何數在計算機面前都會被處...

python 浮點數的精度問題

程式語言浮點數由單精度型和雙精度型兩種 單精度型佔4個位元組32位的記憶體空間只能提供七位有效數字 雙精度型佔8個位元組64位的記憶體空間可提供17位有效數字 python 3 浮點數預設的是 17位數字的精度 將精度高的浮點數轉化成精度低的浮點數,內建方法 round roud 2.873 2 2...