2015-12-11 24 views
15

Ich bin neu bei Python und lerne gerade Operatoren. Ich verstand, dass:Integer-Division in Python 3 - seltsames Ergebnis mit negativer Zahl

  • Der / Operator für floating point division verwendet wird und
  • // für integer division.

Beispiel:

7//3 = 2 

Und 7//-3=-3. Warum ist die Antwort -3?

Ich bin hier fest.

+1

Siehe auch [Warum Pythons Integer-Divisionsböden] (http://python-history.blogspot.com.by/2010/08/why-pythons-integer-division-floors.html) –

Antwort

26

// ist nicht integer Teilung, sondern Boden Abteilung:

7/-3 -> -2.33333... 
7//-3 -> floor(7/-3) -> floor(-2.33333...) -> -3 

PEP 238 auf Ändern der Abteilung Betreiber:

Der // Betreiber verfügbar sein Boden zu beantragen Teilung eindeutig.

Siehe auch Why Python's Integer Division Floors (dank @eugene y) - Grundsätzlich 7//-3-7//3 ist, so dass Sie zu schreiben in der Lage sein:

-7 = 3 * q + r 

Mit q eine ganze Zahl (negativ, positiv oder nul) und r ein Ganzzahl so, dass 0 <= r < 3. Dies funktioniert nur, wenn q = -3:

-7 = 3 * (-3) + 2 
8

// der Betreiber für Boden Division ist.

Dies bedeutet, dass nach der Teilung der „Boden“ Funktion angewandt wird beendet ist (der Wert aus der Division abgerufen wird unabhängig von auf die nächste ganze Zahl abgerundet wird, ob der Dezimalteil größer oder kleiner als, 5)

Beachten Sie bitte, dass bei negativen Antworten der Etagenbetreiber immer noch abgerundet wird (zB -5/2 -> -2.5 -> -3).