Antworten:
In Python 3.x 5 / 2
wird zurückgegeben 2.5
und 5 // 2
wird zurückkehren 2
. Ersteres ist Gleitkommadivision, und letzteres ist Bodenteilung , manchmal auch Ganzzahldivision genannt .
In Python 2.2 oder höher in der 2.x-Zeile gibt es keinen Unterschied für Ganzzahlen, es sei denn, Sie führen a aus from __future__ import division
, wodurch Python 2.x das 3.x-Verhalten übernimmt.
Unabhängig vom zukünftigen Import 5.0 // 2
wird zurückkehren, 2.0
da dies das Ergebnis der Bodenteilung der Operation ist.
Eine ausführliche Beschreibung finden Sie unter https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
python -Qnew
. andere Abteilung Optionen: -Qold
(Standard), -Qwarn
,-Qwarnall
5.0 / 2
Renditen 2.5
in allen Versionen, wie auch 5 / 2.0
- das alte Verhalten ist nur anders , wenn beiden Operanden int
.
Zur Verdeutlichung der Python 2.x-Linie /
ist weder eine Bodenteilung noch eine echte Teilung erforderlich. Die aktuell akzeptierte Antwort ist dazu nicht klar.
/
ist die Bodenteilung , wenn beide Argumente vorhanden sind int
, ist jedoch die wahre Teilung, wenn eines oder beide Argumente vorhanden sind float
.
Das Obige sagt mehr Wahrheit und ist klarer als der 2. Absatz in der akzeptierten Antwort.
//
implementiert "Bodenteilung", unabhängig von Ihrem Typ. Also
1.0/2.0
wird geben 0.5
, aber beides 1/2
, 1//2
und 1.0//2.0
wird geben 0
.
Weitere Informationen finden Sie unter https://docs.python.org/whatsnew/2.2.html#pep-238-changing-the-division-operator
math.floor()
oder math.fmod()
wenn Sie nicht sicher sind, was mit den unären Operatoren los ist.
/
und //
sind zwei Operatoren (zwei Operanden, links und rechts, Zähler und Nenner)
/ -> Gleitkommadivision
// -> Bodenteilung
Sehen wir uns einige Beispiele sowohl in Python 2.7 als auch in Python 3.5 an.
Python 2.7.10 vs. Python 3.5
print (2/3) ----> 0 Python 2.7
print (2/3) ----> 0.6666666666666666 Python 3.5
Python 2.7.10 vs. Python 3.5
print (4/2) ----> 2 Python 2.7
print (4/2) ----> 2.0 Python 3.5
Wenn Sie nun (in Python 2.7) dieselbe Ausgabe wie in Python 3.5 haben möchten, können Sie Folgendes tun:
Python 2.7.10
from __future__ import division
print (2/3) ----> 0.6666666666666666 #Python 2.7
print (4/2) ----> 2.0 #Python 2.7
Wobei es keinen Unterschied zwischen der Floor-Aufteilung in Python 2.7 und in Python 3.5 gibt
138.93//3 ---> 46.0 #Python 2.7
138.93//3 ---> 46.0 #Python 3.5
4//3 ---> 1 #Python 2.7
4//3 ---> 1 #Python 3.5
-100 // 33
=> -4 ; 100 // -33
=> -4 ; aber aufgrund der Rundungsrichtung der Bodenfunktion könnte die nächste im Vergleich zur vorherigen kontraintuitiv erscheinen: -100 // -33
=> 3 .
Wie jeder schon geantwortet hat, //
ist Bodenteilung.
Dies ist wichtig //
, da es sich in allen Python-Versionen ab 2.2, einschließlich Python 3.x-Versionen , um eine eindeutige Unterteilung handelt.
Das Verhalten von /
kann sich ändern in Abhängigkeit von:
__future__
Import oder nicht (modul-lokal)-Q old
oder-Q new
>>> print 5.0 / 2
2.5
>>> print 5.0 // 2
2.0
Python 2.7 und andere kommende Versionen von Python:
/
)Teilt den linken Operanden durch den rechten Operanden
Beispiel: 4 / 2 = 2
//
)Die Division von Operanden, wobei das Ergebnis der Quotient ist, bei dem die Ziffern nach dem Dezimalpunkt entfernt werden. Wenn jedoch einer der Operanden negativ ist, ist das Ergebnis bodenständig, dh von Null weggerundet (in Richtung negative Unendlichkeit):
Beispiele: 9//2 = 4
und 9.0//2.0 = 4.0
, -11//3 = -4
,-11.0//3 = -4.0
Sowohl die /
Division als auch der //
Betreiber der Floor Division arbeiten auf ähnliche Weise.
Der doppelte Schrägstrich //
ist die Bodenteilung:
>>> 7//3
2
//
Wenn es sich um eine Bodenteilung handelt, erhalten Sie immer die ganzzahlige Etage des Ergebnisses. Die andere ist "reguläre" Teilung.
Die obigen Antworten sind gut. Ich möchte noch einen Punkt hinzufügen. Bis zu einigen Werten ergeben beide den gleichen Quotienten. Danach //
funktioniert der Floor Division Operator ( ) einwandfrei, der Division ( /
) Operator jedoch nicht .
- > int(755349677599789174/2)
- > 377674838799894592 #wrong answer
- > 755349677599789174 //2
- > 377674838799894587 #correct answer
5.0//2
Dies 2.0
führt zu und nicht, 2
weil der Rückgabetyp des Rückgabewerts vom //
Operator den Regeln für Python-Zwang (Typumwandlung) folgt.
Python fördert die Konvertierung eines niedrigeren Datentyps (Ganzzahl) in einen höheren Datentyp (Float), um Datenverlust zu vermeiden.
//
Wenn es sich um eine Bodenteilung handelt, erhalten Sie immer den Bodenwert des Ergebnisses./
ist die Gleitkommadivision.Folgendes ist der Unterschied zwischen /
und //
; Ich habe diese arithmetischen Operationen in Python 3.7.2 ausgeführt
>>> print (11 / 3)
3.6666666666666665
>>> print (11 // 3)
3
>>> print (11.3 / 3)
3.7666666666666667
>>> print (11.3 // 3)
3.0
//
Operators in die Ganzzahldivision finden Sie unter Das Problem mit der Ganzzahldivision .