Blog
Hogyan tárolja a Boring Expenses a pénzt (és miért egész számként)
Van egy klasszikus módja annak, hogy elveszíts egy fillért. Kérdezd meg szinte bármelyik programozási nyelvet, mennyi
0.1 + 0.2, és azt feleli: 0.30000000000000004. Ez nem a nyelv hibája – így működnek a bináris lebegőpontos számok. A
legtöbb tizedes törtet nem tudják pontosan ábrázolni, így apró hibák csúsznak be. Fizikához rendben van; pénzhez nem.
Egy pénzügyi appnál a „nagyjából jó” rossz válasz. Ezért a Boring Expenses soha nem tárol összeget tizedes törtként.
A legkisebb egység egész számként
A trükk, amelyet a pénzügyi szoftverek mindig is használtak: a legkisebb egységben számolni, és egész számként tartani. A
4,20 € helyett 420-at tárolsz – a centek számát. Az egész számok pontosak. Egész nap adhatsz össze, vonhatsz ki és
összegezhetsz, kerekítési por soha nem gyűlik össze.
A Boring Expenses egy lépéssel tovább megy, és nagyon finom alegységekben tárolja az összegeket (gondolj „egységenként 100
millióra”), ami bőven hagy helyet a különböző pénznemeknek és a jövőbeli igényeknek, miközben minden egyszerű Int marad. A
képernyőn látott értékre való átváltás csak a széleken történik – amikor beírsz egy összeget, és amikor megjelenítéshez
formázzuk.
// Szemléltetés, nem a pontos kód:
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))
Miért számít ez neked
- Az összegek pontosak. A havi összeg a valódi összeg, nem egy szám, amely a lista növekedésével fillérenként elcsúszik.
- A szinkronizálás egységes. Egy egész szám ugyanazt jelenti iPhone-on, Watchon és iPaden. Nincs mit egyeztetni.
- Az exportok megbízhatók. Az exportált CSV fillérre egyezik az appal.
Ez egy kicsi, feltűnésmentes döntés – pont az a fajta, amit szeretünk. Soha nem fogod látni, és ez a lényeg: a számok egyszerűen stimmelnek.