2014-11-04 15 views
9

Ich bin Anfänger in der Programmierung und Python. Ich mache ein paar einfache Rechenoperationen. So 3/2 in Python-Interpreter gibt 1, wie wir wissen. Aber -3/2 gibt -2. Können Sie hier auf den Unterschied hinweisen?Was ist der Unterschied zwischen 3/2 und -3/2?

+4

'3/2' -> 1,5, abgerundet DOWN zu 1.' -3/2' -> -1.5, abgerundet zu -2. –

+0

Siehe auch http://StackOverflow.com/a/19518866/190597 für eine Erklärung, warum Python auf negative Unendlichkeit rundet. – unutbu

Antwort

5

In Python 2 führt / ganzzahlige Division. Dies bedeutet, dass das Ergebnis abgerundet wird auf den nächsten ganzzahligen Wert, wenn es keine ganze Zahl ist. Wenn der Wert negativ ist, wird dies natürlich auf eine größere negative Zahl gerundet.

Intuitiv ist das Ergebnis der Integer Division einfach die mathematical floor des Ergebnisses der Float Division. Aus diesem Grund wird eine Integer-Division auch allgemein als floor division bezeichnet.

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

Es ist möglich, dieses Verhalten in Python 2 durch an der Spitze des Moduls zu verändern from __future__ import division setzen. Dieser Import bewirkt, dass der Operator / nur die wahre Division (Float Division) anzeigt und die explizite Floor Division (Integer Division) mit dem Operator // aktiviert. Diese Konventionen sind der Standard in Python 3.

from __future__ import division 

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

Wie @Dunes Hinweise in den Kommentaren, es ist erwähnenswert, dass - hat eine höhere Priorität als / und daher -3/2 entspricht (-3)/2 statt -(3/2). Wenn die Division zuerst angewendet würde, wäre das Ergebnis tatsächlich -1.

+0

ich denke, abgerundet wird in der Regel als "floor" +1 für die Erklärung besser als ich –

+0

nennenswert, dass '-' ist unärer Operator hier und bindet enger als die Division Operator. Wenn es umgekehrt wäre, wären die Ergebnisse gleich. – Dunes

+0

In Python 3.4.2 gibt 'int (-1.5)' '-1' zurück. –

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

ebenfalls

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

Python hat zwei Division Operatoren.

  1. /

  2. //

Hier // wird immer um das Ergebnis auf die nächste ganze Zahl (unabhängig von der Art des Operanden). Dies nennt man Bodenteilung. Aber / wird auf die nächste Ganzzahl gerundet, wenn beide Operanden ganze Zahlen sind, wenn es die tatsächliche Division macht, wenn einer der Operanden ein Float ist.

Der Unterschied ist deutlich mit diesem Beispiel zu verstehen,

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

von Python Documentation on floor division Zitiert,

Mathematische Division dass Runden bis auf nächste ganze Zahl. Der Betreiber der Etagenunterteilung ist //.Zum Beispiel wird der Ausdruck 11 // 4 zu 2 im Gegensatz zu 2.7 5 von float wahre Division zurückgegeben. Beachten Sie, dass (-11) // 4-3 ist, denn das ist -2.75 abgerundet. Siehe PEP 238.

Die letzte Zeile im zitierten Text wäre die Antwort auf Ihre eigentliche Frage.

+0

Floor Division und Runden auf die nächste ganze Zahl sind zwei nicht äquivalente Konzepte. In Python 3.4.2 ergibt "5 // 3" 1, und "round (5/3)" ergibt 2. Der Operator '//' wird immer auf negative Unendlichkeit gerundet. –

Verwandte Themen