Python中除法使用的注意事項

2022-10-03 12:39:11 字數 1566 閱讀 6434

現來看如下示例:

def **g(first, *rest):

return (first + sum(rest)) / (1 + len(rest))

# sample use

**g(1, 2) # 1.5

**g(1, 2, 3, 4) # 2.5

源程式只是為了演示變長引數的使用,不過 python 2.7.1 的直譯器裡,我得到的結果卻和注釋的結果不一樣

>>> def **g(fir程式設計客棧st, *rest):

... return (first + sum(rest)) / (1 + len(rest))

...

>>> **g(1, 2)

1 >>> **g(1, 2, 3, 4)

2可以很明顯的看到,小數點後的資料被截斷了,我記得兩個整數相除,apxdbnkr"//" 應該才是取整,難道我記錯了?

>>> def **g(first, *rest):

... return (first + sum(rest)) // (1 + len(rest)) # change '/' to '//'

...

>>> **g(1, 2)

1 >>> **g(1, 2, 3, 4)

2將 「/」 改成了「//」,得到的結果是一樣的,「//」的確是取整這一點我是沒記錯,不過為什麼「/」的結果也是截斷了的?

同樣的程式我在 3.4.1 的直譯器裡面做了測試,得到了預想的結果:

>>> def **g(first, *rest):

... return (first + sum(rest)) / (1 + len(rest))

...

>>> **g(1, 2)

1.5

>>> **g(1, 2, 3, 4)

2.5

>>> def **g(first, *rest):

... return (first + sum(rapxdbnkrest)) // (1 + len(rest)) # change '/' to '//'

...

>>> **g(1, 2)

1 >>> **g(1, 2, 3, 4)

2可以看到在 3.4.1 的直譯器裡,「/」的結果保留了小數字,而「//」則是取整後的結果

搜尋之後,找到了stackoverflow上的這個問題:python裡如何強制除法的結果為浮點數? 注意這個是針對 2.x 的版本,3.x 裡面並不存在這樣的問題

答案的前兩個解決方案,都很不錯:

方法1:

>>> from __future__ import division

>>> a = 4

>>> b = 6

www.cppcns.com>>> c = a / b

>>> c

0.66666666666666663

方法2:

類似於c語言裡面的做法:

c = a / float(b)

本文標題: python中除法使用的注意事項

本文位址:

python中的除法

在未來的 python 3.0中,x y將只執行true除法,而與運算元無關 x y則執行floor除法。如果需要在2.5版本的 python中進行這樣的用法,則需要在 前加入from future import division的宣告。如 python from future import div...

python中的除法

和 在python2中為傳統除法,即當除數被除數都為整數時結果為捨去小數部分的整數,除數和被除數有乙個為浮點數,結果為精確的浮點數。在python3中為真除法,無論除數和被除數為什麼,結果都為精確的浮點數。在python2和python3中為地板除。從python2.2開始到最新的python3,增...

Python中的除法

python中分為3種除法 傳統除法 精確除法 地板除。傳統除法 print 10 3 輸入結果 3.3333333333333335 精確除法 即使是兩個整數恰好整除,結果也是浮點數 print 9 3 輸入結果 3.0 地板除兩個整數的除法仍然是整數 print 9 3 輸入結果 3 你沒有看錯...