2011-10-26 66 views
6

我感到困惑以下整數運算在Python:整數除法在Python

-7/3 = -3因爲(-3)*3 = -9 < -7。我明白。

7/-3 = -3我不明白這是如何定義的。 (-3)*(-3) = 9 > 7。在我看來,它應該是-2,因爲(-3)*(-2) = 6 < 7

這是如何工作的?

+0

Python一般遵循最少的原則。它只是總是舍入整數除法。 – Chriszuma

+3

這裏是直接從bdfl自己的基本原理:http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html –

+1

對於來這裏進行整數除法幫助的人:In Python 3,整數除法使用''//完成,例如'-7 // 3 = -3'但是-7/3 = -2.33..'。 – poke

回答

13

documentation

對於(普通或長)整數除法,其結果是一個整數。 結果總是舍入負無窮:1/2是0,(-1)/ 2是-1,1 /( - 2)是-1,(-1)/( - 2)是0。

-inf的舍入解釋了您所看到的行爲。

+0

哎呀,錯過了。雖然我不喜歡它,但我現在看到它是如何工作的。 – Jonathan

4

這是它如何工作的:

int(x)/int(y) == math.floor(float(x)/float(y)) 
0

Python的幾輪下來。 7/3 = 2(2 + 1/3) -7/3 = -3(-2 + 1/3)

1

擴展了aix和robert的答案。

想到這一點的最好辦法是在向下取整(向負無窮大)浮點結果方面:

-7/3 = floor(-2.33) = -3

7/-3 = floor(-2.33) = -3

0

用於/浮點除法 //用於整數除法(返回整數)

而python將結果向下舍入