2016-05-17 42 views
1

表達式6 // 4產生1,其中地板除法產生的整數除數之後。帶負數的地板部

但是使用負數,爲什麼-6 // 4返回-2

+0

因爲那是地板師。 '-2 <-6/4 <-1' – miradulo

+1

很奇怪的問題,你自己給出答案 – harold

+1

因爲除法的結果是*總是地板*。地板倒塌,不起來。 –

回答

6

//運營商明確樓層的結果。引用的Binary arithmetic operations documentation

結果是數學分區與'地板'函數適用於結果。

地板不是舍入到0;地板始終移動到較小的整數值。見math.floor() function

回報X地板,最大的整數小於或等於X

對於-6 // 4,第一計算的-6/4的結果,所以-1.5。然後地板移動到較低的整數值,因此-2

如果您想要向零取整,您必須明確地執行;你可以與真正的師int()功能做到這一點:

>>> int(-6/4) 
-1 

int()去掉小數部分,所以總是舍入到零來代替。

2

地板分區也將向下舍入到下一個最低的數字,而不是下一個最低的絕對值。

6 // 4 = 1.5,其向下舍入到1,和至多2

-6 // 4 = -1.5,其向下舍入爲-2,和最多爲-1。

0

//在Python中是一個「floor division」運算符。這意味着這種劃分的結果是定期劃分結果的底線(由/運營商執行)。

給定數字的底板是比這個數字小的最大整數。例如

7/2 = 3.5 so 7 // 2 = floor of 3.5 = 3. 

對於負數是不太直觀:-7/2 = -3.5,所以-7 // 2 = floor of -3.5 = -4。類似地,-1 // 10 = floor of -0.1 = -1.

//被定義爲與math.floor()做同樣的事情:返回小於或等於浮點結果的最大整數值。 Zero is not less than or equal to -0.1.

0

一個有用的方法來理解爲什麼樓板劃分//產生它對於負值所做的結果是將這看作是對mod或餘數運算符的補充。

5/3 is equivalent to 1 remainder 2 

5//3 = 1 
5%3 = 2 

-5/3 = -2 
-5%3 = 1 

或者

-2 + 1/3rd which is -1.6667 (ish) 

它可以看起來很奇怪,但它可以確保結果如 -2,-2,-2,-1,-1,-1,0,0,0,1,1,1,2,2,2,3,3,3等時生成序列。