Decimali Python – divisione, arrotondamento, precisione

Il modulo decimal di Python ci aiuta nelle divisioni con la corretta precisione e l’arrotondamento dei numeri.

Modulo decimal di Python

In questa lezione sul modulo decimal in Python, vedremo come possiamo gestire i numeri decimali nei nostri programmi per precisione e formattazione, e anche per fare calcoli. La precisione con i numeri decimali è molto facile da perdere se i numeri non sono gestiti correttamente. Vediamo come il modulo decimal e le sue funzioni disponibili ci aiutano in questi ambiti.

Lavorare con numeri decimali

I numeri decimali sono semplicemente i numeri a virgola mobile con punti decimali fissi. Dobbiamo arrotondare i numeri correttamente in base alle nostre esigenze, altrimenti, i risultati possono essere inaspettati. Il modulo decimal di Python ci aiuta ad essere più precisi con i numeri decimali.

Necessità del modulo decimale

Prima di mettere effettivamente questo modulo in uso, vediamo di quale precisione stiamo parlando e stabiliamo perché abbiamo effettivamente bisogno di questo modulo. Guarda il seguente snippet di codice:

division = 72 / 7
print(division)

Vediamo l’output di questo programma: Beh, la risposta non era effettivamente accurata e non c’erano punti decimali! Vediamo come possiamo correggere questo usando il modulo decimale.

Utilizzando il modulo decimale

In tutti i programmi che faremo in questo post, importeremo il modulo decimale in ognuno di essi:

import decimal

Potrebbe essere il caso che importiamo solo una specifica funzione da questo modulo. Questo può essere fatto come:

from decimal import Decimal

Cominciamo a mettere il modulo decimale in alcuni programmi.

Esempio del modulo decimale Python

Inizieremo ora con esempi relativi al modulo.

Correzione della divisione con decimali

Qui, correggeremo il programma che abbiamo scritto sopra per eseguire la divisione che avrebbe dovuto produrre un risultato in virgola mobile. Il programma modificato con il modulo decimale sarà simile a:

import decimal

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

Vediamo l’output di questo programma: Da notare, la divisione è corretta ora e precisa anche, o forse è troppo precisa?

Controllo della precisione per singola operazione

Nell’ultimo programma, c’erano 25 cifre decimali nella risposta adesso. Ma cosa succede se volessimo solo tre cifre decimali? Anche questo può essere controllato. Qui, controlleremo la precisione della risposta che non si rifletterà in altre operazioni nel nostro 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)

Abbiamo eseguito l’operazione di divisione due volte per dimostrare un punto. Vediamo l’output di questo programma: Hai notato qualcosa? La precisione che abbiamo impostato era valida solo per una singola volta. La prossima volta che abbiamo eseguito la divisione, abbiamo ottenuto lo stesso risultato.

Controllo della precisione per il programma completo

È anche possibile controllare la precisione globalmente nel programma. Questo non è raccomandato tutto il tempo quando si tratta con molti numeri nel proprio programma. Ecco un esempio:

import decimal

decimal.getcontext().prec = 3

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

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

Vediamo l’output per questo programma:

Arrotondamento dei numeri

È possibile arrotondare i numeri in modo accurato utilizzando la funzione round(...). Proviamolo:

import decimal

#Può essere arrotondato a 13.48 o 13.49
rounded = round(13.485, 2)
print(rounded)

Vediamo l’output per questo programma: Il numero nel programma può essere arrotondato a 13.48 o 13.49. Per default, la funzione round(...) arrotonda verso il basso. Questo può essere cambiato anche:

import decimal

#Può essere arrotondato a 13.48 o 13.49
rounded = round(13.485, 2)
print(decimal.Decimal(rounded).quantize(decimal.Decimal('0.00'), rounding=decimal.ROUND_UP))

Vediamo l’output per questo programma:

Ottieni il Contesto Decimal di Python

Se sei interessato a guardare il contesto predefinito impostato di default per il modulo decimal, puoi utilizzare lo script seguente:

from decimal import *
print(getcontext())

Vediamo l’output di questo programma: Questo è tutto per il modulo decimal di Python, è molto utile quando si lavora con numeri in virgola mobile.

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