詳細聊聊為什么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ù),而是近似值,因此它們經過浮點數(shù)運算(對階、尾數(shù)運算、規(guī)格化處理、舍入處理、溢出處理)后得到的值也是近似值,經過了計算機的四舍五入。所以結果是0.30000000000000004
附:實現(xiàn)0.1+0.2==0.3
在python中有一個模塊decimal可以解決0.1+0.2!=0.3的問題。
decimal模塊提供了一個Decimal數(shù)據類型用于浮點數(shù)的計算,相比于內置的二進制浮點數(shù)計算更加精確。
簡單的使用方法:給decimal傳遞Decimal整型或者字符串類型,但不能是浮點數(shù)據(浮點數(shù)據本身不準確)
總結
到此這篇關于為什么Python中0.2+0.1不等于0.3的文章就介紹到這了,更多相關Python 0.2+0.1不等于0.3內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python中文分詞實現(xiàn)方法(安裝pymmseg)
這篇文章主要介紹了Python中文分詞實現(xiàn)方法,通過安裝pymmseg來實現(xiàn)分詞功能,涉及pymmseg的下載、解壓、安裝及使用技巧,需要的朋友可以參考下2016-06-06Python深度學習之FastText實現(xiàn)文本分類詳解
FastText是一種典型的深度學習詞向量的表示方法,它非常簡單通過Embedding層將單詞映射到稠密空間,然后將句子中所有的單詞在Embedding空間中進行平均,進而完成分類操作2022-09-09Python中根據時間自動創(chuàng)建文件夾的代碼實現(xiàn)
這篇文章主要介紹了Python中根據時間自動創(chuàng)建文件夾的代碼實現(xiàn),這樣的話給工作帶來極大的便利,方便桌面文件按時間存放,具體實例代碼跟隨小編一起看看吧2021-10-10python統(tǒng)計字符串中指定字符出現(xiàn)次數(shù)的方法
這篇文章主要介紹了python統(tǒng)計字符串中指定字符出現(xiàn)次數(shù)的方法,涉及Python中count函數(shù)的使用技巧,非常具有實用價值,需要的朋友可以參考下2015-04-04