Blog

Ako Boring Expenses ukladá peniaze (a prečo ako celé číslo)

  • technika
  • iOS
  • Swift

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

Je to malé, nenápadné rozhodnutie – presne také, aké máme radi. Nikdy ho neuvidíte, a o to ide: čísla jednoducho sedia.