← retour aux snippets

decimal: montants financiers et arrondi

Manipuler des montants d'argent sans erreurs binaires, avec arrondi.

objectif

Manipuler des montants d’argent sans erreurs binaires, avec arrondi.

code minimal

from decimal import Decimal, getcontext, ROUND_HALF_EVEN
getcontext().prec = 28
price = Decimal("19.99")
qty = Decimal("3")
total = (price * qty).quantize(Decimal("0.01"), rounding=ROUND_HALF_EVEN)
print(str(total) == "59.97")  # attendu: True

utilisation

from decimal import Decimal
print(Decimal("0.1") + Decimal("0.2") == Decimal("0.3"))

variante(s) utile(s)

from decimal import Decimal, ROUND_HALF_UP
v = Decimal("2.675").quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(str(v) == "2.68")

notes

  • Évitez float pour l’argent; utilisez Decimal avec quantize.
  • ROUND_HALF_EVEN est l’arrondi bancaire par défaut.