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?
Antwort
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
.
ich denke, abgerundet wird in der Regel als "floor" +1 für die Erklärung besser als ich –
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
In Python 3.4.2 gibt 'int (-1.5)' '-1' zurück. –
-3/2 == -1.5 , floor(-1.5) = -2
ebenfalls
3/2 == 1.5 , floor(1.5) = 1
Python hat zwei Division Operatoren.
/
//
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 Ausdruck11 // 4
zu2
im Gegensatz zu2.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.
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. –
- 1. Was ist der Unterschied zwischen UTF-32 und UCS-4?
- 2. Unterschied zwischen und
- 3. Was ist der Unterschied zwischen x86 und x64 ist
- 4. Was ist der Unterschied zwischen `==` und `ist`?
- 5. Was ist der Unterschied zwischen rvalue Referenz und xvalue?
- 6. Verstehen der CLR-Objektgröße zwischen 32 Bit und 64 Bit
- 7. Was ist der Unterschied zwischen diesen Stack- und Heap-Speicheradressen?
- 8. Was ist der Unterschied zwischen verlassen und ret
- 9. Was ist der Minimalwert einer 32-Bit-Ganzzahl mit Vorzeichen?
- 10. Was ist der Unterschied zwischen:.! und: r !?
- 11. Was ist der Unterschied zwischen Difftime und '-'?
- 12. Was ist der Unterschied zwischen $ und $$?
- 13. Was ist der Unterschied zwischen Verilog! und ~?
- 14. was ist der Unterschied zwischen [[], []] und [[]] * 2
- 15. Was ist der Unterschied zwischen/* ... */und/** ... */
- 16. Was ist der Unterschied zwischen `&` und `ref`?
- 17. Was ist der Unterschied zwischen $ (...) und `...`
- 18. Was ist der Unterschied zwischen .Equals und ==
- 19. Was ist der Unterschied zwischen "$^N" und "$ +"?
- 20. Was ist der Unterschied zwischen + = und = +?
- 21. Was ist der Unterschied zwischen? und ? = Nil
- 22. Was ist der Unterschied zwischen $ (()) und Ausdruck?
- 23. Warum ist sizeof (string) == 32?
- 24. Was ist der Unterschied zwischen app.doScript und $ .evalFile?
- 25. Was ist der Unterschied zwischen:
- 26. Subversion mit 32 Bit Server und 32/64 Bit Clients
- 27. Gleitkommadifferenzen zwischen 64 Bit und 32 Bit mit Round
- 28. NumPy - Was ist der Unterschied zwischen FromBuffer und Fromstring?
- 29. Einzel 32-Bit-MSI mit 32/64-Bit-Treiber
- 30. Was ist der Unterschied zwischen vordefinierten Richtlinien und benutzerdefinierten Richtlinien?
'3/2' -> 1,5, abgerundet DOWN zu 1.' -3/2' -> -1.5, abgerundet zu -2. –
Siehe auch http://StackOverflow.com/a/19518866/190597 für eine Erklärung, warum Python auf negative Unendlichkeit rundet. – unutbu