Python Dezimal – Division, Rundung, Genauigkeit

Das Python-Dezimalmodul hilft uns bei der Teilung mit korrekter Genauigkeit und Rundung von Zahlen.

Das Python-Dezimalmodul

In dieser Lektion über das Dezimalmodul in Python sehen wir, wie wir Dezimalzahlen in unseren Programmen für Genauigkeit, Formatierung und Berechnungen verwalten können. Die Genauigkeit bei Dezimalzahlen geht leicht verloren, wenn die Zahlen nicht korrekt behandelt werden. Schauen wir uns an, wie das Dezimal Modul und seine verfügbaren Funktionen in diesen Bereichen helfen.

Arbeiten mit Dezimalzahlen

Dezimalzahlen sind nur Fließkommazahlen mit festen Dezimalstellen. Wir müssen die Zahlen entsprechend unseren Bedürfnissen korrekt runden, sonst können die Ergebnisse unerwartet sein. Das Python-Dezimalmodul hilft uns, bei Dezimalzahlen präziser zu sein.

Bedarf des Dezimalmoduls

Bevor wir dieses Modul tatsächlich verwenden, sehen wir uns an, von welcher Genauigkeit wir sprechen, und klären, warum wir dieses Modul überhaupt benötigen. Betrachten Sie den folgenden Code-Ausschnitt:

division = 72 / 7
print(division)

Lassen Sie uns die Ausgabe für dieses Programm sehen: Nun, die Antwort war eigentlich nicht genau, und es gab überhaupt keine Dezimalstellen! Schauen wir uns an, wie wir dies korrigieren können, indem wir das Dezimalmodul verwenden.

Verwendung des Dezimalmoduls

In allen Programmen, die wir in diesem Beitrag erstellen, werden wir das Dezimalmodul in jedem von ihnen importieren:

import decimal

Es könnte der Fall sein, dass wir nur eine bestimmte Funktion aus diesem Modul importieren. Dies kann wie folgt erfolgen:

from decimal import Decimal

Beginnen wir damit, das Dezimalmodul in einige Programme einzufügen.

Beispiel für das Python-Dezimalmodul

Wir werden nun mit Beispielen im Zusammenhang mit dem Modul beginnen.

Korrektur der Division mit Dezimalstellen

Hier werden wir das oben geschriebene Programm korrigieren, um eine Division durchzuführen, die ein Gleitkommazahl-Ergebnis liefern sollte. Das modifizierte Programm mit dem Modul „decimal“ wird wie folgt aussehen:

import decimal

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

Schauen wir uns das Ergebnis dieses Programms an: Beachten Sie, dass die Division jetzt korrekt und genau ist, oder vielleicht zu genau?

Steuerung der Genauigkeit für eine einzelne Operation

In dem letzten Programm waren 25 Dezimalstellen in der Antwort enthalten. Aber was ist, wenn wir nur drei Dezimalstellen anzeigen möchten? Das kann ebenfalls gesteuert werden. Hier steuern wir die Genauigkeit der Antwort, die sich nicht auf andere Operationen in unserem Programm auswirkt:

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 Division zweimal durchgeführt, um einen Punkt zu verdeutlichen. Schauen wir uns das Ergebnis dieses Programms an: Haben Sie etwas bemerkt? Die Genauigkeit, die wir festgelegt haben, galt nur für eine einzelne Operation. Beim nächsten Mal erhielten wir das gleiche Ergebnis.

Präzisionssteuerung für vollständiges Programm

Es ist auch möglich, die Genauigkeit global im Programm zu steuern. Dies wird nicht empfohlen, wenn Sie es die meiste Zeit mit vielen Zahlen in Ihrem Programm zu tun haben. Hier ist ein Beispiel:

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 die Ausgabe für dieses Programm sehen:

Runden der Zahlen

Es ist möglich, die Zahlen mit der round(...)-Funktion sauber zu runden. Probieren wir es aus:

import decimal

#Kann auf 13,48 oder 13,49 gerundet werden
rounded = round(13.485, 2)
print(rounded)

Lassen Sie uns die Ausgabe für dieses Programm sehen: Die Zahl im Programm kann auf 13,48 oder 13,49 gerundet werden. Standardmäßig rundet die round(...)-Funktion ab. Dies kann ebenfalls geändert werden:

import decimal

#Kann auf 13,48 oder 13,49 gerundet werden
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))

Lassen Sie uns die Ausgabe für dieses Programm sehen:

Holen Sie sich den Python Decimal Context

Wenn Sie am Standardkontext interessiert sind, der standardmäßig für das Dezimalmodul festgelegt ist, können Sie das folgende Skript verwenden:

from decimal import *
print(getcontext())

Lassen Sie uns die Ausgabe für dieses Programm sehen: Das ist alles für das Python-Dezimalmodul. Es ist sehr nützlich beim Arbeiten mit Fließkommazahlen.

Source:
https://www.digitalocean.com/community/tutorials/python-decimal-division-round-precision