Na co vlastně potřebujeme celá čísla?
Na první pohled by se mohlo zdát, že na počítání s penězi bude datový typ Number úplně ideální. Můžeme počítat na dvě desetinná místa – koruny a haléře, nebo euro a centy. Ale pozor. Zkuste si spočítat, kolik je 0,10+0,20. Je to 0,30? Není! Hodnotu 0,10 totiž nelze do datového typu Number zakódovat přesně. Bude to přibližně 0,099999999999999991673327315. Ani čísla 0,20 a 0,30 nebudou zakódována přesně. Chyby v zaokrouhlování způsobí, že 0,10+0,20–0,30=5,551115123125783e-17.
Jak ovšem vyřešit tuto nepříjemnou situaci? Jednoduše budeme počítat v haléřích. Stačí, abychom zobrazovací a čtecí rutiny upravili tak, aby tiskly a akceptovaly desetinnou tečku nebo čárku před druhé místo zprava a je vystaráno.
Ono „počítání v haléřích“ se sice běžně používá ve světě platebních karet (nebo v některých účtovacích protokolech v telekomunikacích se používají dvě celá čísla, kde jedno je částka a druhé určuje počet desetinných míst)… ale dneska je to spíš historický relikt.
Doporučovat někomu v roce 2019, aby peněžní částky počítal v haléřích, je dost uhozené :-) Ono totiž běžně dochází k nedorozumění a lidé chybují i v mnohem méně záludných věcech. Takže z toho, že někdo zapomene vydělit číslo stovkou nebo použije jiný počet desetinných míst, než který se pro danou měnu má použít… docela mrazí. Bude to velmi náchylné k chybám. Pro počítání s penězi je vhodnější typ BigDecimal (např. v Javě).