Blog
Comment Boring Expenses stocke l’argent (et pourquoi c’est un entier)
Voici une façon classique de perdre un centime. Demandez à presque n’importe quel langage de programmation combien font
0.1 + 0.2, et il vous répondra 0.30000000000000004. Ce n’est pas un bug du langage : c’est le fonctionnement des
nombres binaires à virgule flottante. Ils ne savent pas représenter exactement la plupart des fractions décimales, alors
de minuscules erreurs s’y glissent. Très bien pour la physique ; pas pour l’argent.
Pour une app financière, « à peu près juste » est la mauvaise réponse. Boring Expenses ne stocke donc jamais un montant sous forme décimale.
Stocker la plus petite unité sous forme d’entier
L’astuce qu’utilisent les logiciels financiers depuis toujours : calculer dans la plus petite unité et la garder sous
forme d’entier. Au lieu de 4,20 €, on stocke 420 — le nombre de centimes. Les entiers sont exacts. Additionnez,
soustrayez, faites des totaux toute la journée, et aucune poussière d’arrondi ne s’accumule.
Boring Expenses va un cran plus loin et stocke les montants dans des sous-unités très fines (imaginez « 100 millions par
unité »), ce qui laisse une large marge pour les devises et les besoins futurs tout en gardant tout en simple Int. La
conversion vers ce que vous voyez à l’écran n’a lieu qu’aux extrémités — quand vous tapez un montant, et quand nous le
mettons en forme pour l’afficher.
// Illustration, pas le code exact :
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))
Pourquoi c’est important pour vous
- Les totaux sont exacts. Votre total du mois est le vrai total, pas un chiffre qui dérive d’un centime à mesure que la liste s’allonge.
- La synchronisation reste cohérente. Un entier signifie la même chose sur votre iPhone, votre Watch et votre iPad. Il n’y a aucune ambiguïté à réconcilier.
- Les exports sont fiables. Le CSV exporté correspond à l’app au centime près.
C’est une petite décision, sans éclat — exactement le genre qu’on aime. Vous ne la verrez jamais, et c’est tout l’intérêt : les chiffres tombent juste.