Ukládání desetinných čísel v MySQL a následný výpis s pomocí PHP

Následující článek popisuje ukládání reálných čísel v rámci oblíbeného databázového systému MySQL. K tomuto účelu existuje více datových typů, jenž se však ve velmi důležitém ohledu vzájemně liší. Druhá část tohoto průvodce poté pokryje problematiku zpětného zobrazení číselného údaje na webové stránce v souladu s českými zvyklostmi.

Pozor na automatické zaokrouhlení

Pakliže během návrhu tabulky použijete datový typ FLOAT či DOUBLE, získáte možnost ukládat desetinná čísla. Nepřesnosti po vložení několika rozsáhlých údajů však mohou nastat kvůli zaokrouhlení, jenž databázový server provádí samočinně. Oba datové typy se v podstatě liší pouze maximálním rozsahem, jenž dokáží uchovat, přičemž bohatší možnosti v tomto ohledu přináší DOUBLE. Snadno lze ovlivnit, kolik desetinných míst daný sloupec pojme. Tuto informaci nese definice ve tvaru x,y. Znak x zastupuje celkový maximální počet cifer, zatímco y symbolizuje množství znaků za desetinnou tečkou. Ano, jak je ve světě IT obvyklé, i MySQL spoléhá na u nás méně obvyklý symbol. Problémy začínají v případě výsledku s nekonečnou periodou (např. 100 / 3). Záleží poté na konkrétním zvoleném datovém typu a jeho nastavení, jak bude s číselným údajem zacházet. Může dojít k zaokrouhlení či varování o nedostatečném rozsahu.

Podívejme se na příklad vložení jednoduchého dotazu (počítáme 100 / 3):

  • FLOAT(10,2) – 33.33
  • FLOAT (10,6) – 33.333332

Uvedené potíže v mnoha ohledech řeší datový typ DECIMAL, jenž se hodí i pro ukládání finančních údajů, u nichž pochopitelně musí vždy být zachována přesnost.

Za zmínku dále stojí možnost ovlivnit sloupec příznakem UNSIGNED. Ten znemožní vložení záporných údajů, ale nezvýší kapacitu, jak je tomu u datových typů pro celá čísla.

Výpis v obvyklém formátu

Po zpracování tabulky v PHP a získání finální proměnné k výpisu může programátor informace zpřehlednit díky funkci number_format. První parametr očekává dotyčné číslo, následuje počet desetinných míst, způsob jejich oddělení a znak zobrazený na místě řádu tisíců. Konkrétní aplikace number_format($number, 2, ‚,‘, ‚ ‚) poté přinese tento výsledek: 1 234,56.

O Ondřej Směták

Student, který se intenzivně zajímá o oblast IT a to především z pohledu webmastera a programátora GUI aplikací.