Blogg
Slik lagrer Boring Expenses penger (og hvorfor som heltall)
Her er en klassisk måte å miste en øre på. Spør nesten hvilket som helst programmeringsspråk hva 0.1 + 0.2 blir, og det
svarer 0.30000000000000004. Det er ikke en feil i språket – det er slik binære flyttall virker. De kan ikke gjengi de
fleste desimalbrøker nøyaktig, så små feil sniker seg inn. Greit for fysikk; ikke for penger.
For en pengeapp er «omtrent riktig» feil svar. Derfor lagrer Boring Expenses aldri et beløp som et desimaltall.
Lagre den minste enheten som heltall
Trikset pengeprogrammer alltid har brukt, er å regne i den minste enheten og holde den som heltall. I stedet for kr 4,20
lagrer du 420 – antallet øre. Heltall er nøyaktige. Legg sammen, trekk fra og summer hele dagen uten at noe
avrundingsstøv samler seg.
Boring Expenses går et steg videre og lagrer beløp i svært fine underenheter (tenk «100 millioner per enhet»), noe som gir
god plass til ulike valutaer og framtidige behov, samtidig som alt forblir en enkel Int. Omregningen til det du ser på
skjermen skjer bare i kantene – når du skriver inn et beløp, og når vi formaterer det for visning.
// Illustrasjon, ikke den nøyaktige koden:
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))
Derfor betyr det noe for deg
- Summene er nøyaktige. Månedens sum er den virkelige summen, ikke et tall som glir en øre etter hvert som listen vokser.
- Synkroniseringen er konsekvent. Et heltall betyr det samme på iPhone, Watch og iPad. Det er ingenting tvetydig å avstemme.
- Eksportene er til å stole på. CSV-filen du eksporterer, stemmer med appen på øret.
Det er en liten, udramatisk avgjørelse – akkurat den typen vi liker. Du kommer aldri til å se den, og det er poenget: Tallene går bare opp.