2014-11-04 209 views
9

我是編程和Python的初學者。我正在做一些簡單的數學運算。正如我們所知,Python解釋器中的3/2給出了1。但-3/2給出-2。你能指出這裏的區別嗎?3/2和-3/2有什麼區別?

+4

'3/2' - > 1.5,向下取整爲1.'-3/2' - > -1.5,向下取整至-2。 – 2014-11-04 17:04:35

+0

另請參閱http://stackoverflow.com/a/19518866/190597,解釋爲什麼Python向負無窮髮展。 – unutbu 2014-11-04 17:07:39

回答

5

在Python 2,/執行整數除法。這意味着如果結果不是整數,則結果爲舍入爲下一個整數值。當該值爲負時,這自然會變成更大幅度的負數。

直觀上,整數除法的結果就是浮點除法的結果mathematical floor。爲此,整數除法通常也被稱爲floor division

floor(1.5) # Returns 1.0 
floor(-1.5) # Returns -2.0 

有可能通過將from __future__ import division在您的模塊的頂部,以改變在Python 2此行爲。此輸入將使/運營商僅指示真正的劃分(浮點劃分),並使//運營商能夠進行明確的地板劃分(整數劃分)。這些約定都是標準在Python 3

from __future__ import division 

print(3/2) # 1.5 
print(3//2) # 1 

正如評論@Dunes筆記,這是值得注意的是,-/一個更高的優先級,因此-3/2相當於(-3)/2而非-(3/2)。如果首先應用該部門,結果確實是-1

+0

我認爲四捨五入通常被稱爲「floor」+1,因爲它比我更好地解釋它 – 2014-11-04 17:06:46

+0

值得注意的是'-'是一元運算符,與分割運算符綁定更緊密。如果是相反的話,結果將是相同的。 – Dunes 2014-11-04 17:10:16

+0

在Python 3.4.2中,'int(-1.5)'返回'-1'。 – 2014-11-05 16:16:20

4
-3/2 == -1.5 , floor(-1.5) = -2 

同樣

3/2 == 1.5 , floor(1.5) = 1 
1

Python有兩個分部操作員。

  1. /

  2. //

這裏,//將總是圓的結果爲最接近的整數(不論操作數的類型的)。這被稱爲地板分區。但/將四捨五入到最接近的整數,如果兩個操作數都是整數,則表示其中的任何一個操作數都是浮點數,則進行實際除法。

的差異可以與本實施例中可以清楚地理解,

>>> 11/4 
2 
>>> 11.0/4 
2.75 
>>> 11//4 
2 
>>> 11.0//4.0 
2.0 

Python Documentation on floor division引用,

數學除法該回合下來到最接近的整數。地板分區操作員是//。例如,表達式11 // 4評估爲2,與浮法真正劃分返回的結果相反。 請注意(-11) // 4-3,因爲那是-2.75向下舍入爲。見PEP 238

引用文本的最後一行是您實際問題的答案。

+0

地板劃分和舍入到最近的整數是兩個不等價的概念。在Python 3.4.2中,'5 // 3'將產生1,'round(5/3)'將產生2.'// //'運算符總是向負無窮大轉。 – 2014-11-05 16:20:08