Tutorials  /  Python

Python Decimal: Präzise Zahlenverarbeitung

Ccentron Redaktion · Februar 2024 ·5 Min. Lesezeit ·Python, Tutorial

In dieser Lektion über das Decimal-Modul in Python werden wir sehen, wie wir Dezimalzahlen in unseren Programmen für Präzision und Formatierung sowie für Berechnungen verwalten können. Die Präzision bei Dezimalzahlen geht sehr leicht verloren, wenn die Zahlen nicht korrekt behandelt werden. Sehen wir uns an, wie das Decimal-Modul und seine verfügbaren Funktionen in diesen Bereichen helfen.

Arbeiten mit Dezimalzahlen

Dezimalzahlen sind einfach die Fließkommazahlen mit festen Dezimalpunkten. Wir müssen die Zahlen korrekt runden, basierend auf unserem Bedarf, sonst können die Ergebnisse unerwartet sein. Pythons Decimal-Modul hilft uns, präziser mit Dezimalzahlen umzugehen.

VM

Passende Infrastruktur bei centron

Skripte und Dienste brauchen irgendwann eine Umgebung, die durchläuft: ccloud³ VMs ab 3,12 € im Monat, stundengenau abgerechnet. Cloud Server mieten →

Notwendigkeit des Decimal-Moduls

Bevor wir dieses Modul tatsächlich verwenden, sehen wir uns an, über welche Präzision wir sprechen und warum wir dieses Modul tatsächlich benötigen. Schauen wir uns den folgenden Code-Snippet an:

Python
division = 72 / 7
print(division)

Lassen Sie uns das Output für dieses Programm sehen:

Code
sh-3.2$ python decimal_module_need.py
10

Verwendung des Decimal-Moduls

In allen Programmen, die wir in diesem Beitrag erstellen, werden wir das Decimal-Modul importieren:

Python
import decimal

Es kann sein, dass wir nur eine spezifische Funktion aus diesem Modul importieren. Dies kann folgendermaßen gemacht werden:

Python
from decimal import Decimal

Beginnen wir damit, das Decimal-Modul in einigen Programmen einzusetzen.

Python Decimal Modul Beispiel

Wir beginnen jetzt mit Beispielen, die sich auf das Modul beziehen.

Korrektur der Division mit Dezimalzahlen

Hier werden wir das oben geschriebene Programm korrigieren, um eine Division durchzuführen, die eigentlich ein Fließkommazahl-Ergebnis produzieren sollte. Das modifizierte Programm mit dem Decimal-Modul wird wie folgt aussehen:

Python
import decimal

division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)

Lassen Sie uns das Output für dieses Programm sehen:

Code
sh-3.2$ python python_correct_decimal_division.py
10.28571328571428571428571429
sh-3.2$

Zu beachten, die Division ist jetzt korrekt und präzise, oder vielleicht ist sie zu präzise?

Präzisionskontrolle für eine einzelne Operation

Im letzten Programm gab es jetzt 25 Dezimalstellen im Ergebnis. Aber was, wenn wir nur bis zu drei Dezimalstellen wollten? Dies kann ebenfalls gesteuert werden. Hier werden wir die Präzision der Antwort steuern, die sich nicht auf andere Operationen in unserem Programm auswirken wird:

Python
import decimal

with decimal.localcontext() as ctx:
    ctx.prec = 3
    division = decimal.Decimal(72) / decimal.Decimal(7)
    print(division)

again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)

Wir haben die Divisionsoperation zweimal durchgeführt, um einen Punkt zu beweisen. Lassen Sie uns das Output für dieses Programm sehen:

Code
sh-3.2$ python_decimal_division_precision.py
10.3
10.28571328571428571428571429
sh-3.2$

Haben Sie etwas bemerkt? Die von uns eingestellte Präzision war nur einmalig gültig. Beim nächsten Mal, als wir die Division durchführten, erhielten wir dasselbe Ergebnis zurück.

Präzisionskontrolle für das komplette Programm

Es ist auch möglich, die Präzision im gesamten Programm global zu steuern. Dies wird nicht immer empfohlen, wenn Sie in Ihrem Programm mit vielen Zahlen arbeiten. Hier ist ein Beispiel:

Python
import decimal

decimal.getcontext().prec = 3

division = decimal.Decimal(72) / decimal.Decimal(7)
print(division)

again = decimal.Decimal(72) / decimal.Decimal(7)
print(again)

Lassen Sie uns das Output für dieses Programm sehen:

Code
sh-3.2$ python_decimal_division_precision_global.py
10.3
10.3
sh-3.2$

Runden der Zahlen

Es ist möglich, die Zahlen mit der Funktion round(...) elegant zu runden. Lassen Sie uns das ausprobieren:

Python
import decimal

#Can be rounded to 13.48 or 13.49
rounded = round(13.485, 2)
print(rounded)

Lassen Sie uns das Output für dieses Programm sehen:

Code
sh-3.2$ python_round.py
13.48
sh-3.2$

Die Zahl im Programm kann auf 13.48 oder 13.49 gerundet werden. Standardmäßig rundet die Funktion round(...) ab. Dies kann jedoch geändert werden:

Python
import decimal

#Can be rounded to 13.48 or 13.49
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))

Lassen Sie uns das Output für dieses Programm sehen:

Code
sh-3.2$ python_round_up.py
13.49
sh-3.2$

Python Decimal Kontext erhalten

Wenn Sie daran interessiert sind, den Standardkontext anzusehen, der standardmäßig für das Decimal-Modul festgelegt ist, können Sie das folgende Skript verwenden:

Python
from decimal import *
print(getcontext())

Lassen Sie uns das Output für dieses Programm sehen:

Code
sh-3.2$ python python_decimal_context.py
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999999, Emax=999999999, ca
pitals=1, flags=[], traps=[DivisionByZero, Overflow, InvalidOperation])
sh-3.2$

Fazit

Das ist alles für das Python-Decimal-Modul, es ist sehr nützlich, wenn man mit Fließkommazahlen arbeitet. Python Decimal: Präzise Zahlenverarbeitung

Jetzt 200 € Guthaben sichern

Testen Sie Ihr Setup auf ccloud³

Registrieren Sie sich in der ccloud³ und erhalten Sie 200 € Startguthaben für Ihr Projekt – z. B. für eine PostgreSQL-VM mit automatischen Backups.

centron Redaktion Technische Redaktion

Das Redaktionsteam von centron schreibt Anleitungen aus dem Betriebsalltag: getestet auf unserer eigenen Plattform, betrieben im Rechenzentrum in Hallstadt bei Bamberg.

Kategorie Python
Teilen
Noch offene Fragen?

Our team will help you with your specific setup - in German or English, by people who run the platform themselves.

War dieses Tutorial hilfreich?

Your answer is stored anonymously and helps us improve our tutorials.

Kommentare

No comments yet - be the first to ask a question about this tutorial.

Sign in to comment

Comments are open to centron customers. Sign in to your account to ask a question about this tutorial.

Weiterlesen

Das könnte Sie auch interessieren

Jetzt kostenlos anfangen

Melden Sie sich an und erhalten Sie in den ersten 60 Tagen ein Guthaben von 200 € bei centron.

Dieses Werbeangebot gilt nur für neue Konten. Angebot ausschließlich für Gewerbetreibende.

Jetzt loslegen Sales kontaktieren