| | |
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Autor | Správa |
---|
Registrovaný: 10.09.08 Prihlásený: 19.04.22 Príspevky: 126 Témy: 22 Bydlisko: Bratislava |
Ahojte, pripravujem jednu aplikáciu, kde pracujem s číslami (sumy v €). Pri ukladaní do DB násobím čísla zadané cez formulár hodnotou 100 (aby aj desatinné čísla boli ako v DB integer) a narazil som na jeden záhadný problém. Ak niekto zadá do pola vo formulári číslo 555,55, PHP ho vynásobí *100 a výsledkom je 555,54, alebo pri 555,56 vráti 55555 a ja netuším prečo. Ak skúsim iné číslo, napr. 666,55 vráti 66655. Neviete niekto čo je príčinou, príp. ako to ošetriť? Keďže aplikácia praruje so sumami, potrebujem aby boli výsledky presné... Ďakujem za pomoc
|
|
Registrovaný: 01.05.05 Príspevky: 13348 Témy: 1496 Bydlisko: Bratislava | Napísal JanoF: 01.02.2015 18:00 | |
|
co tak sem dat kod ktorym to spracuvavas a skor ti niekto poradi v com by mohol byt problem
_________________ Streacom DA2 | SilverStone Titanium SX800-LTI 800W | ASRock X299E-ITX/ac | Intel Core i9-9980XE & be quiet! Dark Rock TF | Kingston HyperX Impact 64 GB DDR4 2666 MHz | NVIDIA Titan RTX 24 GB | Intel SSD Optane 905P 480 GB NVMe U.2 & Intel SSD 750 1,2 TB NVMe U.2 & Intel SSD 660p 2 TB NVMe M.2 & Seagate BackUp Plus Portable 56 TB USB | 55" 4K OLED Dell Alienware AW5520QF & 24" LCD EIZO FlexScan EV2451 | Ergotron LX Wall Mount Keyboard Arm | Logitech Craft | Logitech G603 | Logitech F710 | Harman Kardon Sabre SB 35 & Sennheiser RS 175 | Microsoft Windows 7 Ultimate | APC Back-UPS ES 700 | Lenovo ThinkPad X250 | iPhone X 256 GB & Pitaka Aramid | SilverStone ML05B Milo | Corsair SF600 SFX 600W | ASRock X99E-ITX/ac | Intel Xeon E5-2683 v4 & NOCTUA NH-L12S | Kingston HyperX Savage 32 GB DDR4 2400 MHz | NVIDIA GeForce GT 710 1 GB | Intel SSD Optane Memory 32 GB NVMe M.2 & Intel SSD 730 240 GB SATA | Ubuntu Server |
|
Registrovaný: 10.09.08 Prihlásený: 19.04.22 Príspevky: 126 Témy: 22 Bydlisko: Bratislava | Napísal autor témy mariachi: 01.02.2015 18:08 | |
|
Aj som chel, len som zabudol... Nejde o čisté PHP, požívam framework, ale ten výpočet je klasické PHP. Kód: $sumaTemp = floatval(str_replace(',', '.', str_replace(' ', '', $input->post->suma))); // input je text $suma = $sumaTemp * 100; // vynásobenie
$produkt->suma = $suma; $produkt->save();
|
|
Registrovaný: 08.08.09 Príspevky: 12449 Témy: 39 | Napísal killer: 01.02.2015 18:28 | |
|
1. Nejaký špeciálny dôvod, prečo do databázy neukladáš sumu ako decimal, resp. iný datový typ s podporou desatinnej bodky? 2. Keď si dáš vypísať obsah jednotlivých premenných ($sumaTemp, $suma, $input->post->suma) sú správne? Napríklad pri vstupe '555,55' je aký obsah jednotlivých premenných?
_________________ always is always wrong |
|
Registrovaný: 10.09.08 Prihlásený: 19.04.22 Príspevky: 126 Témy: 22 Bydlisko: Bratislava | Napísal autor témy mariachi: 01.02.2015 18:41 | |
|
Nuž, po uložení $suma do DB prebiehajú ďalšie výpočty (sčítavanie a odčítavanie), ktoré mi tiež hádzali divné sumy (napriek tomu, že čísla boli v DB uložené dobre). Na Stackoverflow som prešiel nikoľko postov a často tam bolo uvedené ako jedno z riešení ukladať sumy do DB ako int... Skúšal som čísla ukladať aj ako decimal, no napriek tomu boli výsledky nepresné a tak som skúsil ukladať sumy ako integer a fungovalo to až kým som nenarazil pri testovaní na tento problém. Keď si nechám vypísať hodnoty z $input->post->suma a $sumaTemp, hodnota je OK. Až po násobení sa to domrví. //EDIT Skúsil som už vynásobenú hodnotu zaokrúhiť a zatiaľ to vracia správne hodnoty. Ešte to bedem testovať, tak snáď to už bude OK. Kód: $suma = round($sumaTemp * 100);
|
|
Registrovaný: 28.02.11 Prihlásený: 23.04.24 Príspevky: 197 Témy: 6 Bydlisko: Bratislava | Napísal weroro: 01.02.2015 19:03 | |
|
_________________ Neznalosť zložitých operácií necháva myseľ otvorenú pre geniálne riešenia založené na jednoduchosti. |
|
Registrovaný: 10.09.08 Prihlásený: 19.04.22 Príspevky: 126 Témy: 22 Bydlisko: Bratislava | Napísal autor témy mariachi: 01.02.2015 19:38 | |
|
K tejto problematike som si toho už prečítal dosť, takže viem, že to nie je o PHP, ale o tom že PC precuje s "jednotkami a nulami", ale riešenie na to zjavne existuje (aj kalkulačka to musí ošetrovať), ale ako som už napísal, v mojom prípade to (zatiaľ) vyriešilo zaokrúhľovanie.
|
|
| Stránka: 1 z 1
| [ Príspevkov: 7 ] | |
Podobné témy | Témy | Odpovede | Zobrazenia | Posledný príspevok |
---|
| zly obraz pri filmoch v Video programy | 1 | 786 | 08.02.2007 18:40 XPM | | zlý stav particií pri inštalácií v Operačné systémy Microsoft | 1 | 371 | 03.08.2011 14:32 shiro | | zly hdd ? problem pri instalacii windowsu v Pevné disky a radiče | 5 | 450 | 09.01.2014 18:52 shiro | | vyhoda linuxu pri php v Ostatné | 20 | 1123 | 02.08.2008 23:07 rooobertek | | PHP: Kodovanie pri vytvarani .csv v PHP, ASP | 2 | 609 | 22.08.2011 10:36 camo | | Vysledok 3Dmarku06 v Benchmarky a diagnostické programy | 9 | 929 | 25.02.2008 0:07 gadgetsk | | Funkcia return vysledok; v Assembler, C, C++, Pascal, Java | 2 | 347 | 25.10.2014 10:37 dany2281995 | | funkcia nerobí výsledok v PHP, ASP | 2 | 380 | 31.01.2011 11:00 davider137 | | Čakanie na výsledok v JavaScript, VBScript, Ajax | 9 | 634 | 28.12.2010 17:05 coldak | | PHP Progress Bar pri importovani do MySQL v PHP, ASP | 3 | 440 | 19.07.2010 9:45 coldak | | opatovne vykonanie php pri stlaceni tlacidla spat v PHP, ASP | 4 | 509 | 29.12.2012 18:50 boyindoor | | problem s $_GET pri nacitani index.php v PHP, ASP | 2 | 985 | 30.01.2010 23:59 roko146 | | Znizenie zatazenia servera pri stahovani (php/asp) v PHP, ASP | 5 | 511 | 22.02.2008 15:36 emer | | HD Tune výsledok - Otázka v Ostatné programy | 8 | 572 | 20.06.2017 20:21 michalesku | | ako som dostal výsledok? v Assembler, C, C++, Pascal, Java | 4 | 595 | 12.01.2009 16:38 tlacitko Enter | | vysledok gettype stale string v PHP, ASP | 6 | 466 | 14.12.2010 17:05 Feko |
| Nemôžete zakladať nové témy v tomto fóre Nemôžete odpovedať na témy v tomto fóre Nemôžete upravovať svoje príspevky v tomto fóre Nemôžete mazať svoje príspevky v tomto fóre
|
|