問題描述
101/100,想要的結(jié)果是1,但是算出來的結(jié)果是1.01
解決方案
101 // 100
結(jié)果圖
補充:python2 與 3:一般除法、除法取整、除法取余、精確減法與精確除法
python2
python2除法
python2的除法,與c語言除法類似,兩個整數(shù)相除結(jié)果一定是整數(shù),除數(shù)與被除數(shù)有一個是浮點數(shù),結(jié)果就是浮點數(shù)。因此當兩個整數(shù)相除,結(jié)果又有小數(shù)時,由于結(jié)果是整數(shù),所以小數(shù)部分會被省略,針對這種情況,要實現(xiàn)真正的除法,除數(shù)與被除數(shù)至少有一個應改為浮點數(shù)。(貌似python2.7開始,除法和python3除法一樣了,沒有仔細考究)
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除法取整
加一個int(),進行強制類型轉(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計算要把數(shù)字先轉(zhuǎn)為二進制,因為浮點數(shù)以二進制形式表示時的有窮性(利用乘K取余法,0.9的二進制無限延展),會導致計算誤差。下面摘自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,所有的編程語言都會有這個問題,當然可能很多編程語言會使用某些機制來規(guī)避這種顯示。回到該blog的例子,0.9的二進制表示如下:
0.1110011001100110011001100110011001100110011001100110011
1-0.9的二進制表示為:
0.0001100110011001100110011001100110011001100110011001100
轉(zhuǎn)化過來就是0.09999999999999998
這時候為了實現(xiàn)精確運算,可以使用類decimal。
import decimal
decimal.getcontext().prec = 10 # 取小數(shù)點后精度到第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
當然,直接使用近似函數(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
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。
您可能感興趣的文章:- python3 中的幾種除法介紹,小數(shù)的不同顯示
- 詳解Python3除法之真除法、截斷除法和下取整對比
- 詳談Python2.6和Python3.0中對除法操作的異同
- Python3中的真除和Floor除法用法分析