Website-Suche

Python Dezimal - Division, Rundung, Präzision


Das Python decimal-Modul hilft uns bei der Division mit korrekter Präzision und Rundung von Zahlen.

Python Dezimalmodul

In dieser Lektion über das Dezimalmodul 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 ist sehr leicht zu verlieren, wenn Zahlen nicht korrekt behandelt werden. Lassen Sie uns sehen, wie das Dezimalmodul und seine verfügbaren Funktionen in diesen Bereichen helfen.

Arbeiten mit Dezimalzahlen

Dezimalzahlen sind einfach die Gleitkommazahlen mit festen Dezimalpunkten. Wir müssen die Zahlen entsprechend unseren Bedürfnissen korrekt runden, sonst können die Ergebnisse unerwartet sein. Das Dezimalmodul von Python hilft uns, präziser mit Dezimalzahlen umzugehen.

Notwendigkeit für das Dezimalmodul

Bevor wir dieses Modul tatsächlich anwenden, lassen Sie uns sehen, über welche Präzision wir sprechen und warum wir dieses Modul tatsächlich benötigen. Schauen Sie sich den folgenden Codeschnipsel an:

division = 72 / 7
print(division)

Lass uns die Ausgabe dieses Programms sehen:

Nun, die Antwort war tatsächlich nicht genau und es gab überhaupt keine Dezimalstellen! Lassen Sie uns sehen, wie wir dies mit dem Dezimalmodul korrigieren können.

Die Verwendung des Dezimalmoduls

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

import decimal

Es könnte der Fall sein, dass wir nur eine spezifische Funktion aus diesem Modul importieren. Dies kann folgendermaßen erfolgen:

from decimal import Decimal

Lass uns anfangen, das Dezimalmodul in einige Programme einzufügen.

Beispiel für das Python Decimal-Modul

Wir werden jetzt mit Beispielen zum Modul beginnen.

Korrektur der Division mit Dezimalzahlen

Hier werden wir das Programm, das wir oben geschrieben haben, korrigieren, um eine Division durchzuführen, die ein Fließkomma-Ergebnis erzeugen sollte. Das modifizierte Programm mit dem Dezimalmodul sieht wie folgt aus:

import decimal

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

Lass uns die Ausgabe dieses Programms sehen:

Um zu bemerken, die Teilung ist jetzt richtig und auch präzise, oder vielleicht ist sie zu präzise?

Kontrollgenauigkeit für einen einzelnen Betrieb

Im letzten Programm gab es 25 Dezimalstellen in der Antwort. Aber was ist, wenn wir nur bis zu drei Dezimalstellen wollten? Das kann auch gesteuert werden. Hier werden wir die Genauigkeit der Antwort steuern, die sich nicht auf andere Operationen in unserem Programm auswirken wird:

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 beweisen. Sehen wir uns die Ausgabe dieses Programms an:

Hast du etwas bemerkt? Die Präzision, die wir festgelegt haben, galt nur für einen einzelnen Zeitpunkt. Beim nächsten Mal, als wir die Division durchführten, erhielten wir das gleiche Ergebnis zurück.

Kontrollgenauigkeit für das gesamte Programm

Es ist auch möglich, die Genauigkeit global im Programm zu steuern. Dies wird nicht empfohlen, wenn Sie es mit einer Vielzahl von 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)

Lass uns die Ausgabe dieses Programms sehen:

Runden der Zahlen

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

import decimal

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

Lass uns die Ausgabe dieses Programms sehen:

Die Zahl im Programm kann auf 13,48 oder 13,49 gerundet werden. Standardmäßig rundet die round(...)-Funktion ab. Das kann ebenfalls geändert werden:

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))

Lass uns die Ausgabe dieses Programms sehen:

Python Dezimal-Kontext erhalten

Wenn Sie daran interessiert sind, den standardmäßigen Kontext des Dezimalmoduls anzusehen, können Sie das folgende Skript verwenden:

from decimal import *
print(getcontext())

Lass uns die Ausgabe dieses Programms sehen:

Das ist alles zum Python Decimal-Modul, es ist sehr nützlich, wenn man mit Fließkommazahlen arbeitet.