588 Stimmen

Was ist der Unterschied zwischen '/' und '//' bei der Verwendung für die Division?

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

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.

2voto

G.Ant Punkte 29

Die Antwort der Gleichung wird auf die nächst kleinere ganze Zahl oder Fließkommazahl mit .0 als Dezimalpunkt gerundet.

>>> print 5//2
2
>>> print 5.0//2
2.0
>>> print 5//2.0
2.0
>>> print 5.0//2.0
2.0

2voto

villamejia Punkte 189

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)

1voto

iacob Punkte 13293

Python 3

Operation

Result

Notes

x / y

Quotient von x und y

x // y

abgerundeter Quotient von x und y

(1)

Notizen:

  1. 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 ist 0, (-1)//2 ist -1, 1//(-2) ist -1 und (-1)//(-2) ist 0.

Python 2

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 der abs()-Funktion.

5. Wird auch als Ganzzahldivision bezeichnet. Der resultierende Wert ist eine ganze Zahl, obwohl der Typ des Ergebnisses nicht unbedingt int ist.

0voto

Fatema Tuz Zuhora Punkte 2604
  • // ist die Ganzzahldivision. Es liefert immer den ganzzahligen Wert des Ergebnisses.
  • Und das andere, /, 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

0voto

naoki fujita Punkte 601

Zusammenfassung

  • x//y : GENAUE ganze Division
  • int(x/y) ODER math.floor(x/y): UNGENAUE ganze Division (aber fast korrekt)
  • x/y: Gleitkomma-Division (die einen Verlust an Genauigkeit hat)

Bemerkenswertes Berechnungsergebnis

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

Überlegungen

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.com

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.

Powered by:

X