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.