Blog
Hoe Boring Expenses geld opslaat (en waarom als geheel getal)
Hier is een klassieke manier om een cent kwijt te raken. Vraag bijna elke programmeertaal wat 0.1 + 0.2 is en je krijgt
0.30000000000000004. Dat is geen bug in de taal — zo werken binaire drijvendekommagetallen. Ze kunnen de meeste
decimale breuken niet exact weergeven, dus sluipen er kleine fouten in. Prima voor natuurkunde; niet voor geld.
Voor een geld-app is ‘ongeveer goed’ het verkeerde antwoord. Daarom slaat Boring Expenses een bedrag nooit op als decimaal getal.
Sla de kleinste eenheid op als geheel getal
De truc die geldsoftware al sinds jaar en dag gebruikt: reken in de kleinste eenheid en houd die als geheel getal. In
plaats van € 4,20 sla je 420 op — het aantal centen. Gehele getallen zijn exact. Tel de hele dag op, trek af en maak
totalen, en er hoopt zich nooit afrondingsstof op.
Boring Expenses gaat nog een stap verder en slaat bedragen op in heel fijne subeenheden (denk aan ‘100 miljoen per
eenheid’). Dat laat ruim de marge voor allerlei valuta en toekomstige behoeften, terwijl alles een eenvoudige Int blijft.
De omzetting naar wat je op het scherm ziet gebeurt alleen aan de randen — als je een bedrag intypt, en als wij het opmaken
om te tonen.
// Ter illustratie, niet de exacte code:
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))
Waarom dit voor jou telt
- Totalen kloppen exact. Je maandtotaal is het echte totaal, geen getal dat een cent verschuift naarmate de lijst groeit.
- Synchronisatie blijft consistent. Een geheel getal betekent hetzelfde op je iPhone, Watch en iPad. Er valt niets dubbelzinnigs af te stemmen.
- Exports zijn betrouwbaar. De CSV die je exporteert, klopt tot op de cent met de app.
Het is een kleine, onopvallende beslissing — precies het soort waar we van houden. Je zult hem nooit zien, en dat is de bedoeling: de getallen kloppen gewoon.