Blog
Ako Boring Expenses ukladá peniaze (a prečo ako celé číslo)
Existuje klasický spôsob, ako prísť o cent. Opýtajte sa takmer akéhokoľvek programovacieho jazyka, koľko je 0.1 + 0.2, a
odpovie 0.30000000000000004. To nie je chyba jazyka – tak fungujú binárne čísla s pohyblivou desatinnou čiarkou. Väčšinu
desatinných zlomkov nevedia vyjadriť presne, takže sa vlúdia drobné chyby. Pre fyziku v poriadku, pre peniaze nie.
Pre finančnú aplikáciu je „približne správne“ zlá odpoveď. Preto Boring Expenses nikdy neukladá sumu ako desatinné číslo.
Najmenšia jednotka ako celé číslo
Trik, ktorý finančný softvér používa odjakživa: počítať v najmenšej jednotke a držať ju ako celé číslo. Namiesto 4,20 €
uložíte 420 – počet centov. Celé čísla sú presné. Sčítavajte, odčítavajte a robte súčty celý deň a žiadny zaokrúhľovací
prach sa nenahromadí.
Boring Expenses ide ešte o krok ďalej a ukladá sumy vo veľmi jemných podjednotkách (predstavte si „100 miliónov na
jednotku“), čo necháva veľa priestoru pre rôzne meny aj budúce potreby a pritom všetko zostáva obyčajným Int. Prevod na
to, čo vidíte na obrazovke, prebieha len na okrajoch – keď sumu zadávate a keď ju formátujeme na zobrazenie.
// Ilustrácia, nie presný kód:
let display = Decimal(amountInSubunits) / Decimal(subunitsPerUnit)
let text = display.formatted(.currency(code: userCurrency))
Prečo na tom záleží vám
- Súčty sú presné. Mesačný súčet je skutočný súčet, nie číslo, ktoré sa s rastúcim zoznamom posúva o cent.
- Synchronizácia je konzistentná. Celé číslo znamená to isté na iPhone, Watch aj iPade. Nie je čo dorovnávať.
- Exporty sú spoľahlivé. Exportovaný CSV sedí s aplikáciou na cent.
Je to malé, nenápadné rozhodnutie – presne také, aké máme radi. Nikdy ho neuvidíte, a o to ide: čísla jednoducho sedia.