最近在改造之前的代碼的過程中發現一直使用的除法都是“傳統除法”,即對整數進行操作,結果的精度不准,正巧在看python核心編程,碰到這塊,整理下。
關於除法
- 傳統除法
對兩個整數進行除的運算,同時結果會舍去小數部分,返回一個整數。但如果操作數之一是浮點型,則執行真正的除法。
- 真正的除法
返回真實的商,不管操作數的類似是整數還是浮點數
需要執行如下指令將傳統除法轉換為真正的除法
from __future__ import division
- 地板除
不管操作數為何種數值類型,總是舍去小數部分,返回數字序列中比真正的商小的最接近的數字,操作符“//”
舉例:
>>> print "5/3傳統除法:",5/3 5/3傳統除法: 1 >>> from __future__ import division >>> print "5/3真正的除法:",5/3 5/3真正的除法: 1.66666666667 >>> print "5/3地板除:",5.0//3 5/3地板除: 1.0
關於取整
常用的直接就是int(),但會發現是直接把小數部分去掉了的整數,有的時候不是我們要的,學習了下int,floor,round的區別
- int() 直接截去小數部分(返回值為整型)
- floor()得到的是最接近原數但小於原數的整型(返回值為浮點型)
- round()得到最接近原數的整型(返回值為浮點型)
舉例:
>>> import math >>> int(3.67) 3 >>> math.floor(3.67) 3.0 >>> round(3.67) 4.0
如上只是針對python2.X版本的情況,python3.X版本已經有了變化。
如下為python3.3版本的對應變化
關於除法
- 傳統除法
python3.3版本中的傳統除法就是真正的除法,不管除數和被除數是否為整數,結果都是真實的商。
- 地板除
python3.3版本中保留了地板除。
舉例:
>>> print ("傳統除法:",1/2) 傳統除法: 0.5 >>> print ("地板除:",1//2) 地板除: 0
關於取整
python3.3中的int()和floor()、round()的運算方式沒變動,只是最終的返回結果都是整型
舉例:
>>> int(1.9) 1 >>> import math >>> math.floor(1.2) 1 >>> type(math.floor(1.2)) <class 'int'> >>> round(1.6) 2 >>> type(round(1.6)) <class 'int'>