PHP aritmetika rubrika: Programování: PHP
Ahoj,
mám problém s aritmetikou v PHP. Asi jsem zrovna chyběl ve škole, když se probíraly kupecké počty :)
Může mi někdo prosím vysvětlit proč se děje co se děje?
return
float(150.21)
float(150.72)
float(0.50999999999999)
proč se vrací 0.50999999999999 a ne 0.51 ?
A jak to eventuelně řešíte?
ironic
Mám to radši počítat v SQL serveru :)
SELECT (150.21+0.51)-150.21 = 0.51
/ironic
Děkuji za rozsvícení
Tam nie je čo "osvecovať" :) To je proste problematika float - čísiel s plávajúcou desatinnou čiarkou. Je to absolútny základ programovania - vedieť, že počítač nevie pracovať s desatinnými číslami a výsledné výpočty majú obmedzenú presnosť. Z toho dôvodu je to proste problém absolútne každého programovacieho jazyka a zároveň dôvod, prečo sa float zrovna často nepoužíva a tam, kde je presnosť vyžadovaná, je doslova zakázané použiť ho.
Keď už tam vidím ten SELECT ... pokiaľ robíš databázovú aplikáciu s PHP a MariaDB / MySQL napríklad, a držíš si nejaké desatinné číslo v databáze, povedzme, že stav pokladne, beztak by si nemal stav pokladne updatovať tak, ako to často vidím: načítam si z databázy aktuálny stav pokladne a uložím v PHP do premennej, k tej premennej pripočítam napríklad vklad z inputu či inej premennej a s výslednou sumou urobím UPDATE v databáze. Odporúčaný postup je niečo na spôsob "UPDATE pokladna SET stav = stav + vklad WHERE ...". A ak si navyše nadefinuješ stĺpec stav ako "exact numeric data type", čiže DECIMAL (NUMERIC), tak Ti bude stav takejto pokladne, udržovaný takýmto postupom, vždy sedieť na cent.
Pro zobrazení všech 8 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem: