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


總結(jié)
到此這篇關(guān)于為什么Python中0.2+0.1不等于0.3的文章就介紹到這了,更多相關(guān)Python 0.2+0.1不等于0.3內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python 列表 sort()函數(shù)使用實(shí)例詳解
這篇文章主要介紹了Python 列表 sort()函數(shù)使用詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-07-07
SQLite3中文編碼 Python的實(shí)現(xiàn)
下面小編就為大家?guī)硪黄猄QLite3中文編碼 Python的實(shí)現(xiàn)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01
python如何通過閉包實(shí)現(xiàn)計(jì)算器的功能
這篇文章主要介紹了python如何通過閉包實(shí)現(xiàn)計(jì)算器的功能,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02
Python實(shí)現(xiàn)七彩蟒蛇繪制實(shí)例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)七彩蟒蛇繪制實(shí)例代碼,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Pandas 類型轉(zhuǎn)換astype()的實(shí)現(xiàn)
本文主要介紹了Pandas 類型轉(zhuǎn)換astype()的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07
Python利用zhdate模塊實(shí)現(xiàn)農(nóng)歷日期處理
zhdate模塊統(tǒng)計(jì)從1900年到2100年的農(nóng)歷月份數(shù)據(jù)代碼,支持農(nóng)歷和公歷之間的轉(zhuǎn)化,并且支持日期差額運(yùn)算。本文將利用這一模塊實(shí)現(xiàn)農(nóng)歷日期的處理,需要的可以參考一下2022-03-03
Pytorch?Mac?GPU?訓(xùn)練與測評(píng)實(shí)例
這篇文章主要為大家介紹了Pytorch?Mac?GPU?訓(xùn)練與測評(píng)實(shí)例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-01-01
Python裝飾器使用示例及實(shí)際應(yīng)用例子
這篇文章主要介紹了Python裝飾器使用示例及實(shí)際應(yīng)用例子,本文給出了斐波拉契數(shù)列、注冊(cè)回調(diào)函數(shù)、mysql封裝、線程異步等實(shí)際使用示例,需要的朋友可以參考下2015-03-03

