Gibt es einen Vorteil, den einen gegenüber dem anderen zu verwenden? In Python 2 scheinen sie beide die gleichen Ergebnisse zurückzugeben:
>>> 6/3
2
>>> 6//3
2
Gibt es einen Vorteil, den einen gegenüber dem anderen zu verwenden? In Python 2 scheinen sie beide die gleichen Ergebnisse zurückzugeben:
>>> 6/3
2
>>> 6//3
2
Klärung von Python 3.x
Nur um einige frühere Antworten zu ergänzen.
Es ist wichtig zu betonen, dass:
a // b
ist eine ganzzahlige Division. Wie in:
math.floor(a/b)
ist keine Ganzzahldivision. Wie in:
int(a/b)
ist keine Rundung auf 0.0 Ganzzahldivision. Wie in:
round(a/b,0)
Daher ist das Verhalten bei positiven und negativen Zahlen unterschiedlich, wie im folgenden Beispiel:
1 // 2 ist 0, wie in:
math.floor(1/2)
-1 // 2 ist -1, wie in:
math.floor(-1/2)
Operation
Result
Notes
x / y
Quotient von x und y
x // y
abgerundeter Quotient von x und y
(1)
Notizen:
- Wird auch als Ganzzahldivision bezeichnet. Der resultierende Wert ist eine ganze Zahl, obwohl der Typ des Ergebnisses nicht unbedingt int ist. Das Ergebnis wird immer abgerundet in Richtung minus Unendlich:
1//2
ist0
,(-1)//2
ist-1
,1//(-2)
ist-1
und(-1)//(-2)
ist0
.
Operation
Result
Notes
x / y
Quotient von x und y
(1)
x // y
(abgerundeter) Quotient von x und y
(4)(5)
Notizen:
1. Für (einfache oder lange) Integerdivision ist das Ergebnis eine ganze Zahl. Das Ergebnis wird immer abgerundet in Richtung minus Unendlich: 1/2 ist 0, (-1)/2 ist -1, 1/(-2) ist -1 und (-1)/(-2) ist 0. Beachten Sie, dass das Ergebnis eine lange Ganzzahl ist, wenn einer der Operanden eine lange Ganzzahl ist, unabhängig vom numerischen Wert.
4. Veraltet seit Version 2.3: Der Bodenteilungsoperator, der Modulooperator und die
divmod()
-Funktion sind nicht mehr für komplexe Zahlen definiert. Konvertieren Sie stattdessen bei Bedarf in eine Gleitkommazahl mithilfe derabs()
-Funktion.5. Wird auch als Ganzzahldivision bezeichnet. Der resultierende Wert ist eine ganze Zahl, obwohl der Typ des Ergebnisses nicht unbedingt int ist.
//
ist die Ganzzahldivision. Es liefert immer den ganzzahligen Wert des Ergebnisses./
, ist die Gleitkomma-Division.Im folgenden 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
import math
N = 1004291331219602346 # riesige Zahl
print(N//100) #=> 10042913312196023 ist die korrekte Antwort
print(math.floor(N/100)) #=> 10042913312196024 ist die falsche Antwort
print(math.ceil(N/100)) #=> 10042913312196024 ist die falsche Antwort
print(int(N/100)) #=> 10042913312196024 ist die falsche Antwort
Ich denke über die Auswertung von int(x/y)
nach.
Zuerst berechnet Python den Ausdruck x/y
und erhält eine UNGENAUE Gleitkommazahl z.
Dann berechnet Python den Ausdruck int(z)
.
Wir erhalten ein falsches Ergebnis, wenn der Verlust an Genauigkeit nicht ignoriert werden kann.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.
3 Stimmen
Bitte schauen Sie sich Das Problem mit der ganzzahligen Division an, um den Grund für die Einführung des
//
Operators zur Durchführung ganzzahliger Division zu erfahren.