2011-10-26 20 views
6

Sono confuso circa la seguente matematica intero in python:divisione Integer in Python

-7/3 = -3 dal (-3)*3 = -9 < -7. Capisco.

7/-3 = -3 Non capisco come questo è definito. (-3)*(-3) = 9 > 7. Secondo me, dovrebbe essere -2, perché (-3)*(-2) = 6 < 7.

Come funziona?

+0

Python segue generalmente il Principio di Almost Astonishment. Si limita sempre alla divisione intera. – Chriszuma

+3

Ecco la logica, direttamente dallo stesso bdfl: http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html –

+1

Per le persone che arrivano qui per aiuto nella divisione intera: In Python 3, la divisione in interi è fatta usando '//', es '-7 // 3 = -3' ma' -7/3 = -2,33..'. – poke

risposta

13

Dal documentation:

Per la divisione intera (normale o lungo), il risultato è un numero intero. Il risultato è sempre arrotondato verso il meno infinito: 1/2 è 0, (-1)/2 è -1, 1/(- 2) è -1, e (-1)/(- 2) è 0.

L'arrotondamento verso -inf spiega il comportamento che si sta verificando.

+0

Oops, mancato quello. Anche se non mi piace, ora vedo come funziona. – Jonathan

4

Questo è come funziona:

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

Python arrotonda per difetto. 7/3 = 2 (2 + 1/3) -7/3 = -3 (-2 + 1/3)

1

Espansione sulle risposte di aix e robert.

Il modo migliore per pensare di questo è in termini di arrotondamento (verso meno infinito) il risultato virgola mobile:

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

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

0

/è utilizzato per il galleggiamento divisione punto // è usato per la divisione di interi (restituisce un numero intero)

E python arrotonda il risultato verso il basso