Résolue

Erreur d'arrondi avec le module Decimal

# Résolution d'erreurs # Python

Bonjour la team,

Je suis en train de faire tous les exercices débutants. Cela me permet de voir si j'ai des lacunes afin de les combler.
Je viens de faire l'exercie Calcul du total d'une addition avec pourboire qui est fort intéressant que j'ai réussi avec le module math.
J'ai voulu voir la solution de ce dernier et à ma plus grande surprise, il n'y avait pas d'explications avec du code. Donc j'ai regardé une solution proposée d'un de mes camarades.
Je me suis amusée à modifier mon code en testant le module decimal.
Quand j'éxécute mon script, le résultat attendu de mon 1er exemple fonctionne par contre le 2ème n'est pas le résultat attendu. Pourriez-vous m'expliquer mon erreur svp :-) ? Il a sûrement une notion qui doit m'échapper xD.
Merci par avance pour l'aide apportée :-)

from decimal import Decimal, ROUND_HALF_UP


def calculer_total(addition, pourboire_pourcent):
    if addition < 0 or pourboire_pourcent < 0:
        raise ValueError("La donnée entrée est négative !")
    else:
        calcul_tips = addition * (1 + (pourboire_pourcent/100))
        calcul_tips = str(calcul_tips)
        return Decimal(calcul_tips).quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)

print(calculer_total(53.5, 15))  # attendu: 61.53
print(calculer_total(53.9, 15))  # attendu: 61.99

Gabriel Trouvé

Mentor

Salut,

Tiens c'est marrant, je suis en train de faire presque la même chose que toi mais avec Django. Essayes d'utiliser Decimal avant les calculs.

Alors j'avoue qu'avec Decimal je m'y perds souvent, mais comme ça normalement c'est ok :

from decimal import Decimal, ROUND_HALF_UP

def calculer_total(addition, pourboire_pourcent):
    if addition < 0 or pourboire_pourcent < 0:
        raise ValueError("La donnée entrée est négative !")

    calcul_tips = Decimal(str(addition)) * (1 + Decimal(str(pourboire_pourcent)) / 100)
    return calcul_tips.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)

Coucou,

Merci beaucoup pour ta réponse ;-)

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.