筆者在有一次需要提取乙個浮點數的每一位時,出現下面情況:
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...