Zadejte hledaný výraz...
Jakub Glos
Webtrh.cz
Vývoj webových stránek na WordPressu a proklientský přístup pro freelancery
Třídenní infromacemi nabitý prezenční + online kurz v Praze od Webtrhu pouze za 2 871 Kč
Více informací

Problem s cenami

node
verified
rating uzivatele
(5 hodnocení)
4. 8. 2017 14:23:44
Ahojte,
mal som v db ceny ulozene ako decimal 19,4 a vcera som sa rozhodol komplet prekopat vsetko na integery....len tak z nudy lebo vsetko fungovalo uplne v poriadku.
V db mam big int 20 a v logike pouzivam 4 desatinne miesta kvoli bezpecnemu zaokruhlovaniu v pripade mien ktore maju mensiu jednotku ako cent, cize mi ostalo 16 miest pre cele cisla(tzn 1234567890123456,1234) a mam tak prakticky neobmedzeny rozsah pre ceny.
Vyslednu cenu tak potom vypisujem ako round($price / (pow, 4), 4), cize z int 123456789 sa stane float 12345,6789 a potom to eventuelne este naformatujem podla aktivnej meny.
Kvoli ulahceniu prace som si zapuzdril https://github.com/moneyphp/money do hlavneho objektu ceny aby som tak mohol robit jednoducho matematicke operace bez nutnosti pisat si vsetku logiku.
Anyway, vsetko funguje v pohode ......... az na zaokruhlovanie :D
Problem je v tom ze tym ze interne pouzivam 4 cisla za desatinou ciarkou ale ceny su prakticky len na 2 desatine miesta(napriklad EUR), pri matematickych operaciach sa mi stava ze mam nejaky zostatok na 3. desatinom mieste ktory nasledne ovplyvni zaokruhlovanie a ziskam tak nepresnu cenu lebo money si mysli ze pracuje so zakladnou jendotkou(centom), co nie je pravda.
Priklad:
Realna cena 89,4, ulozena cena 894000.
Pridam si zlavu 5% -> 894000 * 0.95 = 849300
Pridam si DPH 20% -> 849300 * 1.2 = 1019160
Co sa mi na frontende vypise ako 101.92 namiesto 101.91, nakolko je pre mna ta 0.0060 nepodstatna informacia.
Dalsi problem je ked si zdvojnasobim pocet:
1019160 * 2 = 2038320, co sa vypise ako 203.83. Cize ak uz mam v prvom rade 101.92 tak budem ocakavat 203.84. Cize je to totalne nekonzistentne zaokruhlovanie.
Takze riesim ze co s tym. Realne by sa matematicke operacie mali robit podla aktivnej meny(tzn pouzije sa spravny exponent) ale uchovavat stale na 1/10000. Jedine co ma napada je pri vytvoreni money mu predhodit "useknute" cislo podla exponentu aktivnej meny a pri ukladnai do db to zase doplnit len mi to pride nejake retardovane.
4. 8. 2017 14:23:44
https://webtrh.cz/diskuse/problem-s-cenami/#reply1293518
hm
verified
rating uzivatele
(20 hodnocení)
4. 8. 2017 14:29:51
v cem je prosimte tohle divny cviceni s integrama lepsi od pouzivani decimalu? Jake vyhody to ma mit?
vcetne toho proc to cviceni delas v php ktere je bezpecne na floatu az do nakeych 70 bilionu (pouziva double precision)... Prijde mi ze delas neco co nepotrebujes delat...
4. 8. 2017 14:29:51
https://webtrh.cz/diskuse/problem-s-cenami/#reply1293517
node
verified
rating uzivatele
(5 hodnocení)
4. 8. 2017 16:29:51
Tak som to vyriesil tak ze ak sa deje nejaka matematicka operacia tak jej vysledok prejde funkciou ktora si zisti exponenta defaultnej meny aplikacie a eventuelne "usekne" nadbytocne cisla a nahradi ich 0 takze nedochadza neskor k ziadnemu zaokruhlovaniu.
Rovanky problem som mal aj ked som pouzival decimal akurat teraz mi chvilu trvalo nez som dosiel ze aj tu to treba riesit :D
4. 8. 2017 16:29:51
https://webtrh.cz/diskuse/problem-s-cenami/#reply1293516
Pro odpověď se přihlašte.
Přihlásit