Recherche de site Web

Python décimal - division, arrondir, précision


Le module decimal de Python nous aide à effectuer des divisions avec une précision appropriée et un arrondi des nombres.

Module decimal de Python

Dans cette leçon sur le module decimal en Python, nous verrons comment nous pouvons gérer les nombres décimaux dans nos programmes pour la précision, le formatage et les calculs également. La précision avec les nombres décimaux est très facile à perdre si les nombres ne sont pas manipulés correctement. Voyons comment le module decimal et ses fonctions disponibles aident dans ces domaines.

Travailler avec des nombres décimaux

Les nombres décimaux ne sont que des nombres à virgule flottante avec des points décimaux fixes. Nous devons arrondir les nombres correctement en fonction de nos besoins, sinon les résultats peuvent être inattendus. Le module decimal de Python nous aide à être plus précis avec les nombres décimaux.

Besoin du module décimal

Avant d'utiliser réellement ce module, voyons quelle précision nous évoquons et pourquoi nous avons réellement besoin de ce module. Regardez le snippet de code suivant :

division = 72 / 7
print(division)

Voyons le résultat de ce programme :

Eh bien, la réponse n'était en réalité pas précise et il n'y avait aucun point décimal ! Voyons comment nous pouvons corriger cela en utilisant le module decimal.

Utiliser le module decimal

Dans tous les programmes que nous réaliserons dans ce post, nous importerons le module decimal dans chacun d'eux :

import decimal

Il se peut que nous n'importions qu'une fonction spécifique de ce module. Cela peut être fait comme suit :

from decimal import Decimal

Commençons à intégrer le module decimal dans quelques programmes.

Exemple du module décimal de Python

Nous allons commencer par des exemples liés au module maintenant.

Correction de la division avec des décimales

Ici, nous allons corriger le programme que nous avons écrit ci-dessus pour effectuer une division qui devrait produire un résultat flottant. Le programme modifié avec le module decimal ressemblera à :

import decimal

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

Voyons le résultat de ce programme :

À noter, la division est maintenant correcte et précise, ou peut-être est-elle trop précise ?

Contrôle de la précision pour une opération unique

Dans le dernier programme, il y avait 25 décimales dans la réponse maintenant. Mais que faire si nous ne voulions que jusqu'à trois décimales ? Cela peut également être contrôlé. Ici, nous allons contrôler la précision de la réponse qui ne se reflétera pas dans les autres opérations de notre programme :

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)

Nous avons effectué l'opération de division deux fois pour prouver un point. Voyons le résultat de ce programme :

Avez-vous remarqué quelque chose ? La précision que nous avions définie n'était valable que pour un seul moment. La prochaine fois que nous avons fait la division, nous avons obtenu le même résultat.

Contrôle de la précision pour un programme complet

Il est également possible de contrôler la précision globalement dans le programme. Ce n'est pas recommandé tout le temps lorsque vous traitez avec beaucoup de nombres dans votre programme. Voici un exemple :

import decimal

decimal.getcontext().prec = 3

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

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

Voyons le résultat de ce programme :

Arrondir les nombres

Il est possible d'arrondir gracieusement les nombres avec la fonction round(...). Essayons :

import decimal

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

Voyons le résultat de ce programme :

Le nombre dans le programme peut être arrondi à 13,48 ou 13,49. Par défaut, la fonction round(...) arrondit vers le bas. Cela peut également être modifié :

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

Voyons le résultat de ce programme :

Obtenir le contexte décimal de Python

Si vous êtes intéressé par le contexte par défaut défini par défaut pour le module decimal, vous pouvez utiliser le script suivant :

from decimal import *
print(getcontext())

Voyons le résultat de ce programme :

C'est tout pour le module decimal de Python, il est très utile lors du travail avec des nombres à virgule flottante.