python3 實(shí)現(xiàn)除法結(jié)果為整數(shù)
問題描述
101/100,想要的結(jié)果是1,但是算出來的結(jié)果是1.01
解決方案
101 // 100
結(jié)果圖
補(bǔ)充:python2 與 3:一般除法、除法取整、除法取余、精確減法與精確除法
python2
python2除法
python2的除法,與c語言除法類似,兩個(gè)整數(shù)相除結(jié)果一定是整數(shù),除數(shù)與被除數(shù)有一個(gè)是浮點(diǎn)數(shù),結(jié)果就是浮點(diǎn)數(shù)。因此當(dāng)兩個(gè)整數(shù)相除,結(jié)果又有小數(shù)時(shí),由于結(jié)果是整數(shù),所以小數(shù)部分會(huì)被省略,針對(duì)這種情況,要實(shí)現(xiàn)真正的除法,除數(shù)與被除數(shù)至少有一個(gè)應(yīng)改為浮點(diǎn)數(shù)。(貌似python2.7開始,除法和python3除法一樣了,沒有仔細(xì)考究)
a = 3 b = 2 print a/b print float(a)/b print a/float(b) print float(a)/float(b) # 結(jié)果 1 1.5 1.5 1.5
python2除法取整
加一個(gè)int(),進(jìn)行強(qiáng)制類型轉(zhuǎn)換即可。
a = 4.5 b = 3 print a/b print int(a/b) # 結(jié)果 1.5 1
python2除法取余
利用%操作即可。
a = 5.5 b = 3 print a % b # 結(jié)果 2.5
python3
python3除法
python3的除法就直接使用"/",就可以了,不存在python2的情況
a = 3 b = 2 print(a/b) # 結(jié)果 1.5
python3除法取整
利用"http://"操作 a = 5.5 b = 2 print(a//b) # 結(jié)果 2.0
python3除法取余
利用"%"操作
a = 5.5 b = 2 print(a%b) # 結(jié)果 1.5
python3精確減法與精確除法
我們先看看下面的輸出
a = 0.9 b = 1 print(b-a) print((b-a)/100) print((0.1)/100) # 結(jié)果 0.09999999999999998 0.0009999999999999998 0.001
python計(jì)算要把數(shù)字先轉(zhuǎn)為二進(jìn)制,因?yàn)楦↑c(diǎn)數(shù)以二進(jìn)制形式表示時(shí)的有窮性(利用乘K取余法,0.9的二進(jìn)制無限延展),會(huì)導(dǎo)致計(jì)算誤差。下面摘自python文檔原話。
On most machines today, floats are approximated using a binary fraction with the numerator using the first 53 bits starting with the most significant bit and with the denominator as a power of two.
這不是只有python才有的bug,也不是你代碼的bug,所有的編程語言都會(huì)有這個(gè)問題,當(dāng)然可能很多編程語言會(huì)使用某些機(jī)制來規(guī)避這種顯示。回到該blog的例子,0.9的二進(jìn)制表示如下:
0.1110011001100110011001100110011001100110011001100110011
1-0.9的二進(jìn)制表示為:
0.0001100110011001100110011001100110011001100110011001100
轉(zhuǎn)化過來就是0.09999999999999998
這時(shí)候?yàn)榱藢?shí)現(xiàn)精確運(yùn)算,可以使用類decimal。
import decimal decimal.getcontext().prec = 10 # 取小數(shù)點(diǎn)后精度到第10位 a = 0.9 b = 1 print(decimal.Decimal(b)-decimal.Decimal(a)) print((decimal.Decimal(b)-decimal.Decimal(a))/100) print((0.1)/100) # 結(jié)果 0.1000000000 0.0010000000 0.001
當(dāng)然,直接使用近似函數(shù)round()也是可以的。
a = 0.9 b = 1 print(round(b-a, 10)) print(round((b-a)/100, 10)) print(round((0.1)/100, 10)) # 結(jié)果 0.1 0.001 0.001
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
linux上運(yùn)行python腳本,SyntaxError:?invalid?syntax的解決
這篇文章主要介紹了linux上運(yùn)行python腳本,SyntaxError:?invalid?syntax的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-12-12Python中max函數(shù)用于二維列表的實(shí)例
下面小編就為大家分享一篇Python中max函數(shù)用于二維列表的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-04-04Windows系統(tǒng)下Chromedriver.exe安裝及配置詳細(xì)教程
ChromeDriver.exe是一款實(shí)用的chrome瀏覽器驅(qū)動(dòng)工具,能夠用于自動(dòng)化測試、網(wǎng)絡(luò)爬蟲和操作瀏覽器,其主要作用是模擬瀏覽器操作,下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)下Chromedriver.exe安裝及配置的相關(guān)資料,需要的朋友可以參考下2023-11-11Python3實(shí)現(xiàn)自定義比較排序/運(yùn)算符
這篇文章主要介紹了Python3實(shí)現(xiàn)自定義比較排序/運(yùn)算符,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02python 命令行傳入?yún)?shù)實(shí)現(xiàn)解析
這篇文章主要介紹了python 命令行傳入?yún)?shù)實(shí)現(xiàn)解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-082行Python代碼實(shí)現(xiàn)給pdf文件添加水印
你們在給PDF文件添加水印時(shí),還在手動(dòng)一頁頁添加嗎?本文小編為大家?guī)砹艘粋€(gè)更方便的方法,即用Python的2行代碼來實(shí)現(xiàn),感興趣的小伙伴可以學(xué)習(xí)一下2022-02-02利于python腳本編寫可視化nmap和masscan的方法
這篇文章主要介紹了利于python腳本編寫可視化nmap和masscan的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Python制作數(shù)據(jù)預(yù)測集成工具(值得收藏)
這篇文章主要介紹了Python如何制作數(shù)據(jù)預(yù)測集成工具,幫助大家進(jìn)行大數(shù)據(jù)預(yù)測,感興趣的朋友可以了解下2020-08-08