Arbeiten Sie mit numerischen Datentypen in Python? Lernen Sie die verschiedenen Möglichkeiten zum Runden von Zahlen in Python kennen.
Die meisten realen Datensätze enthalten sowohl numerische als auch kategorische Merkmale. Es gibt ein breites Spektrum an numerischen Merkmalen, von Sensormesswerten bis hin zu Wechselkursen, biomedizinischen Signalen und mehr.
Wenn Sie mit numerischen Werten arbeiten, müssen Sie diese Werte möglicherweise auf eine feste Genauigkeit runden, z.B. aus folgenden Gründen
- Sicherstellung eines einheitlichen Formats
- Leichtere Speicherung und Verarbeitung
In diesem Tutorial lernen Sie die verschiedenen Möglichkeiten kennen, wie Sie eine Zahl auf eine bestimmte Genauigkeit runden, Zahlen auf die nächste Ganzzahl auf- und abrunden und vieles mehr.
Fangen wir an.
Wie man Zahlen mit der eingebauten Funktion round() rundet
Die gebräuchlichste Methode zum Runden von Zahlen in Python ist die eingebaute Funktion round(). Beginnen wir damit, ihre Syntax zu lernen:
round(num, ndigits)
Hier,
num
ist die Zahl, die Sie runden möchtenndigits
ist ein optionaler Parameter mit dem StandardwertNone
. Er gibt die Anzahl der Stellen an, auf die die Zahl gerundet werden soll. Wennndigits
= 2 ist, wird num auf zwei Stellen nach dem Dezimalpunkt gerundet.- Die Funktion
round()
gibtnum
gerundet aufndigits
Genauigkeit nach dem Dezimalpunkt zurück.
Beispiele für die Verwendung der Funktion round() in Python
Lassen Sie uns einige Beispiele codieren, um zu verstehen, wie die Funktion round()
funktioniert.
Wie bereits erwähnt, ist ndigits
optional. Wenn wir also round()
nur mit der Zahl aufrufen, wird die Zahl auf die nächste Ganzzahl gerundet.
zahl = 7.123456
gerundet = round(Zahl)
print(gerundet)
# Ausgabe: 7
Lassen Sie uns nun einige Beispiele betrachten, bei denen wir die Genauigkeit angeben.
Wenn ndigits
auf 2 gesetzt ist, wird Zahl
auf zwei Nachkommastellen (Zehntelstelle) gerundet:
zahl = 7.123456
gerundet = round(Zahl, 2)
print(gerundet)
# Ausgabe: 7.12
Wenn ndigits
auf 3 gesetzt ist, wird Zahl
auf drei Dezimalstellen (Hundertstel) gerundet:
zahl = 7.123456
gerundet = round(Zahl, 3)
print(gerundet)
# Ausgabe: 7.123
Sie können rund()
auch verwenden, um negative Zahlen zu runden:
zahl = -3.4
gerundet = round(Zahl)
print(gerundet)
# Ausgabe: -3
Hier rundet die Funktion -3.4 auf -3, die nächstliegende ganze Zahl.
Runden auf die nächstgelegene Zehner- und Hunderterstelle
Wussten Sie, dass ndigits
auch negative Werte annehmen kann?
Ja, Sie können die Funktion round()
mit negativen Werten für ndigits
aufrufen. Wenn Sie dies tun, erfolgt die Rundung links vom Dezimalpunkt statt rechts.
Was hat das zu bedeuten? Lassen Sie uns einige Beispiele sehen.
Wenn wir ndigits auf -1 setzen, wird die Zahl auf die nächste Zehnerstelle gerundet.
zahl = 7.123456
gerundet = round(Zahl, -1)
print(gerundet)
# Ausgabe: 10.0
Und der Aufruf der Funktion round()
mit ndigits auf -2 rundet die Zahl 77.123456 auf den nächsten Hunderter auf, was in diesem Fall 100.0 ist.
zahl = 77.123456
gerundet = round(Zahl, -2)
print(gerundet)
# Ausgabe: 100.0
Bis jetzt scheint die Funktion round()
den allgemeinen Grundsätzen des Rundens zu folgen, die wir in der Schulmathematik gelernt haben. Aber das ist nicht immer der Fall.
Bei Fließkommazahlen gibt es einige Einschränkungen . So können Sie beim Runden einige unerwartete Ergebnisse erhalten. Ein weiterer interessanter Vorbehalt ist die Rundung durch die Bank.
Was ist Banker’s Rounding?
Starten Sie eine Python REPL und versuchen Sie das folgende Beispiel:
>>> round(1.5)
2
Wir sehen, dass round(1.5)
2 zurückgibt (wie erwartet). Was sollte round(2.5)
also zurückgeben?
>>> rund(2.5)
2
Interessant, nicht wahr? Sowohl round(1.5)
als auch round(2.5)
geben 2 zurück. Aber wie und warum?
Intern funktioniert die Rundungsfunktion folgendermaßen: Jeder Wert, der in der Mitte zwischen zwei Ganzzahlen liegt, wird auf die nächste gerade Ganzzahl gerundet. Dies nennt man Banker’s Rounding oder die Round half to even Strategie.
Wir wissen, dass die Funktion round()
für einfache Rundungsaufgaben ausreicht. Aber manchmal müssen Sie eine Zahl auf die nächste ganze Zahl auf- oder abrunden.
Wie machen Sie das also? Das lernen wir im nächsten Abschnitt.
Wie man Zahlen in Python aufrundet
Um eine Zahl auf die nächste ganze Zahl aufzurunden, können Sie verwenden:
- Die Funktion
ceil()
aus dem Modul math oder - Das Dezimal-Modul
Verwendung von math.ceil
Die ceil()
-Funktion (oder ceiling-Funktion) funktioniert folgendermaßen: Sie rundet eine Zahl auf die kleinste ganze Zahl auf, die größer ist als die Zahl.
Der folgende Ausschnitt zeigt, wie Sie die Funktion ceil()
verwenden, um die Zahl 3,2 aufzurunden:
importieren Sie math
zahl = 3.2
aufgerundet = math.ceil(Zahl)
print(aufgerundet_auf)
# Ausgabe: 4
Verwendung des Dezimalmoduls
Bis jetzt haben wir den eingebauten Float-Datentyp verwendet. Aber für bestimmte Anwendungen im wissenschaftlichen Rechnen und im Finanzwesen benötigen wir eine viel höhere Genauigkeit. Und dafür gibt es in Python das Decimal-Modul:
- Präzisere Gleitkommaarithmetik
- Zuverlässige Gleichheitstests
- Feinere Kontrolle über die Genauigkeit (die Standardgenauigkeit beträgt 28 Stellen)
Um den aktuellen Kontext zu sehen, verwenden Sie getcontext()
wie gezeigt:
from decimal import getcontext
aktueller_Kontext = getcontext()
print(aktueller_kontext)
Sie sollten u.a. die aktuelle Genauigkeit und den Rundungsmodus sehen können:
# Ausgabe
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
Um eine Zahl aufzurunden, können Sie quantize()
verwenden, indem Sie angeben:
- Die Genauigkeit (0.0, da wir auf die nächste Ganzzahl aufrunden wollen) und
- Den Rundungsmodus:
ROUND_CEILING
from decimal import Decimal, ROUND_CEILING
zahl = Decimal('3.2')
rounded_up = Zahl.quantize(Decimal('0'), rounding=ROUND_CEILING)
print(aufgerundet_auf)
# Ausgabe: 4
Hier wurde die Zahl 3.2 auf die nächste ganze Zahl 4 aufgerundet.
Wie man Zahlen in Python abrundet
Sehen wir uns nun an, wie wir in Python Zahlen abrunden können. Ähnlich wie beim Aufrunden können wir entweder das math- oder das decimal-Modul verwenden.
Verwendung von math.floor
Die Funktion floor()
aus dem math-Modul funktioniert folgendermaßen: Sie rundet eine Zahl auf die größte Ganzzahl ab , die kleiner als die Zahl ist.
Lassen Sie uns das folgende Beispiel nehmen:
importieren Sie math
zahl = 3,8
abgerundet_ab = math.floor(Zahl)
print(abgerundet_unten)
# Ausgabe: 3
Hier rundet die Funktion floor()
die Fließkommazahl 3,8 auf 3 ab.
Verwendung des Dezimalmoduls
Um eine Zahl abzurunden, können Sie quantize()
verwenden, indem Sie den Rundungsmodus auf ROUND_FLOOR
setzen.
from decimal import Decimal, ROUND_FLOOR
zahl = Decimal('3.8')
abgerundet_abwärts = Zahl.quantize(Decimal('0'), rounding=ROUND_FLOOR)
print(abgerundet_abwärts)
# Ausgabe: 3
Wie Sie sehen, wurde 3,8 auf 3 abgerundet.
Häufige Fallstricke, die beim Runden von Zahlen zu vermeiden sind
Wir haben bereits gesehen, dass die Funktion round()
die Hälfte auf eine gerade Zahl rundet, was nicht immer erwünscht ist. Beim Runden von Zahlen in Python gibt es noch einige andere häufige Fallstricke, die Sie vermeiden sollten:
- Falscher Gleichheitsvergleich: Beim Runden von Zahlen treten häufig Rundungsfehler auf. Wenn Sie versuchen, einen Gleichheitsvergleich zwischen einem gerundeten Ergebnis und einem anderen Wert durchzuführen, wird die Gleichheitsprüfung (fast immer) aufgrund der unterschiedlichen Genauigkeit fehlschlagen. Versuchen Sie also, Gleichheitsvergleiche zwischen Fließkommazahlen und gerundeten Fließkommazahlen zu vermeiden. Wenn der Vergleich notwendig ist, dann führen Sie eine Toleranzschwelle ein.
- Verlust von Informationen: Möglicherweise möchten Sie bestimmte Daten, wie z.B. Sensormesswerte zu verschiedenen Zeitpunkten, mit hoher Genauigkeit erfasst haben. Das Runden solcher Daten auf weniger Dezimalstellen führt zu Informationsverlusten und falschen Analysen.
- Rundung von Zwischenergebnissen: Sie werden oft mehrere Schritte als Teil der Berechnung durchführen. Verwenden Sie eine einheitliche Genauigkeit für alle Schritte. Vermeiden Sie außerdem Rundungen bei Zwischenschritten, um zu verhindern, dass sich die Rundungsfehler summieren.
Bewährte Praktiken zum Runden von Zahlen in Python
Im Folgenden finden Sie einige bewährte Verfahren, die Sie beim Runden von Zahlen in Python beachten sollten:
- Wählen Sie den richtigen Datentyp: Wählen Sie je nach Anwendung zwischen Float- und Dezimaldatentypen. Wenn Sie hochpräzise Fließkomma-Arithmetik durchführen müssen, wählen Sie den Datentyp decimal.
- Verwenden Sie einheitliche Genauigkeitsstufen: Legen Sie im gesamten Programm einheitliche Genauigkeitsstufen für Dezimalzahlen fest, um unerwartete Rundungsfehler zu vermeiden.
- Dokumentieren Sie Rundungstechniken: In realen Anwendungen, die Daten wie Währungen und Sensorwerte enthalten, ist es wichtig, eine konsistente und dokumentierte Rundungstechnik zu verwenden.
Schlusswort
Lassen Sie uns das Tutorial mit einem kurzen Rückblick auf das Gelernte abschließen:
- Sie können die eingebaute Funktion
round()
mit dieser Syntaxround(num, ndigits)
verwenden. Wenn Sie die Funktionround()
verwenden, sollten Sie sich der Rundungsstrategie der Banker bewusst sein. Sie rundet also Zahlen, die genau zwischen zwei ganzen Zahlen liegen, auf die nächste gerade ganze Zahl. - Sie können die Funktionen
ceil()
undfloor()
aus dem Modul math verwenden, um eine gegebene Zahl auf die nächste Ganzzahl auf- bzw. abzurunden. - Wenn Sie hochpräzise Gleitkomma-Arithmetik benötigen, verwenden Sie das Dezimalmodul. Sie können Zahlen mit der gewünschten Genauigkeit und Rundungsstrategie runden.
- Sie sollten sich der üblichen Fallstricke beim Runden von Zahlen in Python bewusst sein. Dazu gehören der Verlust von Informationen durch das Runden, das Runden von Ergebnissen in Zwischenschritten und die Verwendung unterschiedlicher Genauigkeiten in verschiedenen Teilen des Codes.
- Zu den besten Praktiken gehören die Wahl des richtigen Datentyps je nach Anwendung und die Dokumentation konsistenter Genauigkeitsstufen.
Als nächstes lernen Sie, wie man in Python eine Bodenteilung durchführt.