Python decimal – deling, afronden, precisie

De Python-decimal-module helpt ons bij het delen met de juiste precisie en afronding van getallen.

Python-decimal-module

In deze les over de decimal-module in Python zullen we zien hoe we decimale getallen kunnen beheren in onze programma’s voor precisie, opmaak en berekeningen. De precisie van decimale getallen is erg gemakkelijk te verliezen als getallen niet correct worden behandeld. Laten we eens kijken hoe de decimal module en de beschikbare functies helpen op deze gebieden.

Werken met decimale getallen

Decimale getallen zijn gewoon zwevende-komma getallen met een vast decimaal punt. We moeten de getallen correct afronden op basis van onze behoefte, anders kunnen de resultaten onverwacht zijn. De decimal-module van Python helpt ons om preciezer te zijn met decimale getallen.

Noodzaak van de decimale module

Voordat we deze module daadwerkelijk gaan gebruiken, laten we eens kijken over welke precisie we praten en vaststellen waarom we deze module eigenlijk nodig hebben. Bekijk de volgende codefragment:

division = 72 / 7
print(division)

Laten we de uitvoer voor dit programma bekijken: Nou, het antwoord was eigenlijk niet nauwkeurig en er waren helemaal geen decimalen! Laten we kijken hoe we dit kunnen corrigeren door de decimale module te gebruiken.

Het gebruik van de decimale module

In alle programma’s die we in deze post maken, zullen we de decimale module in al deze programma’s importeren:

import decimal

Het kan zijn dat we alleen een specifieke functie uit deze module importeren. Dit kan als volgt worden gedaan:

from decimal import Decimal

Laten we beginnen met het opnemen van de decimale module in enkele programma’s.

Voorbeeld van de Python decimale module

We zullen nu beginnen met voorbeelden die verband houden met de module.

Correctie van deling met decimalen

Hier zullen we het programma dat we hierboven hebben geschreven corrigeren om deling uit te voeren die een zwevend kommagetal als resultaat had moeten produceren. Het aangepaste programma met de decimalenmodule zal er als volgt uitzien:

import decimal

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

Laten we de uitvoer voor dit programma bekijken: Let op, de deling is nu correct en ook precies, of misschien te precies?

Controle van precisie voor enkele bewerking

In het laatste programma waren er 25 decimalen in het antwoord. Maar wat als we slechts tot drie decimalen wilden? Dit kan ook worden gecontroleerd. Hier zullen we de precisie van het antwoord regelen die niet zal worden weerspiegeld in andere bewerkingen in ons programma:

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)

We hebben de delingsbewerking twee keer uitgevoerd om een punt te bewijzen. Laten we de uitvoer voor dit programma bekijken: Iets opgemerkt? De precisie die we hebben ingesteld was slechts geldig voor één keer. De volgende keer dat we de deling deden, kregen we hetzelfde resultaat terug.

Controle van precisie voor volledig programma

Het is ook mogelijk om de precisie globaal in het programma te controleren. Dit wordt niet altijd aanbevolen wanneer je veel getallen in je programma verwerkt. Hier is een voorbeeld:

import decimal

decimal.getcontext().prec = 3

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

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

Laten we de uitvoer van dit programma bekijken:

Afronden van de getallen

Het is mogelijk om de getallen netjes af te ronden met de round(...) functie. Laten we het proberen:

import decimal

#Kan afgerond worden naar 13.48 of 13.49
rounded = round(13.485, 2)
print(rounded)

Laten we de uitvoer van dit programma bekijken: Het getal in het programma kan afgerond worden naar 13.48 of 13.49. Standaard rondt de round(...) functie naar beneden af. Dit kan ook worden gewijzigd:

import decimal

#Kan afgerond worden naar 13.48 of 13.49
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))

Laten we de uitvoer van dit programma bekijken:

Python Decimale Context Ophalen

Als je geïnteresseerd bent in het bekijken van de standaardcontext die is ingesteld voor de decimal module, kun je het volgende script gebruiken:

from decimal import *
print(getcontext())

Laten we de uitvoer voor dit programma bekijken: Dat is alles voor de Python decimal module, het is zeer nuttig bij het werken met getallen met zwevende komma.

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