詳細聊聊為什么Python中0.2+0.1不等于0.3
為什么Python中0.2+0.1不等于0.3
大家請看下面的python程序代碼:
print(0.2+0.1)
猜一猜運行結果是什么,是0.3嗎?
NoNoNo!
來看一看運行結果:
0.30000000000000004
為什么是0.30000000000000004呢?
浮點數(shù)運算
這是因為在計算機中,浮點數(shù)運算也是要先轉化為二進制的
1.浮點數(shù)如何轉化為二進制:
⑴整數(shù)部分:除以2,取出余數(shù),商繼續(xù)除以2,直到得到0為止,將取出的余數(shù)逆序
⑵小數(shù)部分:乘以2,然后取出整數(shù)部分,將剩下的小數(shù)部分繼續(xù)乘以2,然后再取整數(shù)部分,一直取到小數(shù)部分為零為止。
如果永遠不為零,則按要求保留足夠位數(shù)的小數(shù),最后一位做0舍1入。將取出的整數(shù)順序排列。
2. 0.2轉化為二進制:(只看小數(shù)點后)
0.2 × 2 = 0.4 取 0
0.4 × 2 = 0.8 取 0
0.8 × 2 = 1.6 取 1
0.6 × 2 = 1.2 取 1
0.2 × 2 = 0.4 取 0
0.4 × 2 = 0.8 取 0
0.8 × 2 = 1.6 取 1
…
所以0.2轉化為浮點數(shù)為0.001100110011…(0011無限循環(huán))0.1轉化為二進制:
同理0.1轉化為浮點數(shù)為0.0001100110011…(0011無限循環(huán))
0.2+0.1
因為在計算機中,0.2和0.1都不是確定的數(shù),而是近似值,因此它們經(jīng)過浮點數(shù)運算(對階、尾數(shù)運算、規(guī)格化處理、舍入處理、溢出處理)后得到的值也是近似值,經(jīng)過了計算機的四舍五入。所以結果是0.30000000000000004
附:實現(xiàn)0.1+0.2==0.3
在python中有一個模塊decimal可以解決0.1+0.2!=0.3的問題。
decimal模塊提供了一個Decimal數(shù)據(jù)類型用于浮點數(shù)的計算,相比于內(nèi)置的二進制浮點數(shù)計算更加精確。
簡單的使用方法:給decimal傳遞Decimal整型或者字符串類型,但不能是浮點數(shù)據(jù)(浮點數(shù)據(jù)本身不準確)


總結
到此這篇關于為什么Python中0.2+0.1不等于0.3的文章就介紹到這了,更多相關Python 0.2+0.1不等于0.3內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python利用zhdate模塊實現(xiàn)農(nóng)歷日期處理
zhdate模塊統(tǒng)計從1900年到2100年的農(nóng)歷月份數(shù)據(jù)代碼,支持農(nóng)歷和公歷之間的轉化,并且支持日期差額運算。本文將利用這一模塊實現(xiàn)農(nóng)歷日期的處理,需要的可以參考一下2022-03-03

