HOWTO · Python
Konvertieren einer Fließkommazahl in eine ganze Zahl in Python
In diesem Artikel wird erläutert, wie Sie eine Gleitkommazahl in Python in eine Ganzzahl konvertieren
Auf dieser Seite
Um eine Gleitkommazahl in Python in eine Ganzzahl umzuwandeln, verwenden Sie die eingebaute Funktion int(), wenn der Nachkommateil in Richtung null abgeschnitten werden soll. Für eine andere Regel verwenden Sie math.ceil(), um zur kleinsten Ganzzahl aufzurunden, die größer oder gleich dem Wert ist, oder math.floor(), um zur größten Ganzzahl abzurunden, die kleiner oder gleich dem Wert ist. Die Standardbibliothek stellt außerdem math.trunc() bereit, das ebenfalls gegen null abschneidet. Wählen Sie die Funktion, deren Rundungsverhalten zu Ihrer Berechnung passt; bei negativen Werten liefern diese Funktionen nicht alle dasselbe Ergebnis.
Eine Gleitkommazahl mit int() in eine Ganzzahl umwandeln
Führen Sie dieses Beispiel aus:
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
number = 25.49
print(int(number))
25
Bei einem positiven Bruchteil entfernt int() den Nachkommateil. Bei einem negativen Wert wird ebenfalls in Richtung null abgeschnitten: int(-1.5) ergibt -1, nicht -2. Das ist Abschneiden und keine Rundung auf die nächste Ganzzahl. Wenn Sie auf den nächstgelegenen Wert runden müssen, verwenden Sie eine Rundungsfunktion, statt anzunehmen, dass int() dies erledigt.
int() akzeptiert eine Gleitkommazahl, eine Ganzzahl und Text, der eine Ganzzahl darstellt, zum Beispiel int("25"). Text mit einem Dezimalpunkt, etwa "25.49", stellt keine Ganzzahl dar und kann nicht direkt an int() übergeben werden. Wandeln Sie Dezimaltext zunächst in eine Gleitkommazahl um und übergeben Sie diese anschließend an int(), wenn Abschneiden beabsichtigt ist. Achten Sie auf den Eingabetyp: Eine numerische Gleitkommazahl und eine Zeichenfolge werden unterschiedlich umgewandelt.
Ein Gleitkommaliteral kann auch anders dargestellt werden, als seine geschriebene Dezimalzahl vermuten lässt. Python kann beispielsweise 1.9999999999999999 als 2.0 darstellen. Wird diese bereits dargestellte Gleitkommazahl mit int() umgewandelt, ergibt sich daher die Ganzzahl, die 2.0 entspricht. Für sechzehn oder mehr Neunen gibt es keine besondere Regel in int(). Die Umwandlung verarbeitet den Gleitkommawert, der nach dem Einlesen tatsächlich vorliegt. Ein Ergebnis nahe einer Ganzzahl kann also sowohl an der Gleitkommadarstellung als auch am Abschneiden liegen.
Mit math zwischen Abschneiden, Aufrunden und Abrunden wählen
Verwenden Sie das Modul math, wenn die gewünschte Regel ausdrücklich festgelegt werden soll. math.trunc() schneidet gegen null ab und verhält sich bei Gleitkommazahlen wie int(). math.ceil() liefert die kleinste Ganzzahl, die größer oder gleich dem Wert ist. math.floor() liefert die größte Ganzzahl, die kleiner oder gleich dem Wert ist. Bei negativen Zahlen wird der Unterschied deutlich: Beim Abschneiden wird -1.5 zu -1, beim Abrunden zu -2 und beim Aufrunden zu -1. Bei positiven Brüchen führen Abschneiden und Abrunden zur gleichen kleineren Ganzzahl, während Aufrunden zur nächsthöheren führt.
Das folgende eigenständige Beispiel vergleicht positive und negative Werte mit allen drei Funktionen der Standardbibliothek.
Der Code und die angezeigten Bezeichnungen oder Ausgaben in diesem Abschnitt bleiben auf Englisch.
import math
for number in (1.5, -1.5):
print(number, math.trunc(number), math.ceil(number), math.floor(number))
1.5 1 2 1
-1.5 -1 -1 -2
Verwenden Sie int() oder math.trunc(), wenn der Nachkommateil in Richtung null entfernt werden soll, math.ceil(), wenn das Ergebnis nicht kleiner als der Eingabewert sein darf, und math.floor(), wenn es nicht größer sein darf. Wenn Sie beispielsweise eine gemessene Menge in ganze Einheiten umwandeln, entscheiden Sie, ob nur vollständig enthaltene Einheiten zählen, immer genügend Einheiten bereitgestellt oder ausschließlich vollständig abgedeckte Einheiten berücksichtigt werden sollen. Wenn Sie diese Regel im Code ausdrücklich benennen, lässt sich das Ergebnis leichter überprüfen und eine unbeabsichtigte Rundungsrichtung vermeiden.
Bei gewöhnlichen endlichen Zahlen liefern alle diese Funktionen Python-Ganzzahlen. Die Nachkommainformation bleibt dabei nicht erhalten. Wenn spätere Berechnungen diese Genauigkeit benötigen, behalten Sie neben der umgewandelten Ganzzahl auch die ursprüngliche Gleitkommazahl. Für Dezimalwerte, die exakte Dezimalarithmetik erfordern, sollten Sie vor der Umwandlung prüfen, ob eine Dezimaldarstellung besser geeignet ist. Eine bereits angenäherte Gleitkommazahl kann die bei ihrer Darstellung verlorenen Dezimalstellen nicht wiederherstellen.