Zadejte hledaný výraz...

Nejde mi zaokrouhlovat v PHP?

meloun
verified
rating uzivatele
(5 hodnocení)
22. 4. 2010 15:30:41
Prosím prosím o pomoc:
Tak tohle mi vypisuje 149.985 - 149.98 - 149.99. Proč to špatně zaokrouhluje proměnnou, ale když stejné číslo napíšu "natvrdo", zaokrouhlí správně? To samé mi dělá i number_format()...
22. 4. 2010 15:30:41
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495239
hm
verified
rating uzivatele
(20 hodnocení)
22. 4. 2010 15:35:09
to ej klasicka vlatsnost vypoctu s floatem - v promenne je ulozeno pro stroj neco jako 149.984999999999999999999 a to se zaokrouhli dolu zatimco primy zapis 149.985 se zaokrouhluje nahoru - reseni je pouzivani BC Math funkci ktere jsou ale mnohem pomalejsi a slozitejsi na jakekoliv pouzivani - zato presnejsi... http://www.php.net/manual/en/ref.bc.php
osobne bych spis doporucil zkusit pocitat pokud mozno co nejvic s celymi cisly
Napsal meloun;500907
Prosím prosím o pomoc:
Tak tohle mi vypisuje 149.985 - 149.98 - 149.99. Proč to špatně zaokrouhluje proměnnou, ale když stejné číslo napíšu "natvrdo", zaokrouhlí správně? To samé mi dělá i number_format()...
22. 4. 2010 15:35:09
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495238
Vít Michalek
verified
rating uzivatele
(14 hodnocení)
22. 4. 2010 15:38:48
K čemu potřebuješ zaokrouhlení uprsotřed výpočtu na 4 místa? Když to tam nedáš tam bude výsledek správný : 150?
A nuber_forma() přeci nema se zaokrouhlováním nic poslečného? Jen vypíše number v požadovaném tvaru
22. 4. 2010 15:38:48
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495237
hm
verified
rating uzivatele
(20 hodnocení)
22. 4. 2010 15:39:55
Napsal mic362;500913
K čemu potřebuješ zaokrouhlení uprsotřed výpočtu na 4 místa? Když to tam nedáš tam bude výsledek správný : 150?
A nuber_forma() přeci nema se zaokrouhlováním nic poslečného? Jen vypíše number v požadovaném tvaru
number format muze mimo jine zaokrouhlit cislo prece :)
mimochodem kdyz se odstrani zakrouhleni uprostred vypoctu pak vyjhde
150
150
149.99
;) ale to neresi priklad nahore...
22. 4. 2010 15:39:55
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495236
Vít Michalek
verified
rating uzivatele
(14 hodnocení)
22. 4. 2010 15:45:35
Ajo :)
jinak jsem to zkusil vypocist takto:
$b = (550 * round(10/(10+100)*10000) * 3)/10000;
echo round($b,2);
Výsledek je 149,99
22. 4. 2010 15:45:35
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495235
meloun
verified
rating uzivatele
(5 hodnocení)
22. 4. 2010 15:48:29
Napsal mic362;500913
K čemu potřebuješ zaokrouhlení uprsotřed výpočtu na 4 místa? Když to tam nedáš tam bude výsledek správný : 150?
Tohle jsem příliš nepochopil... Ta desítka v tom prvním zaokrouhlení na 4 místa jde z DB a může se lišit (sazba DPH).
---------- Post added 22.4.2010 at 15:50 ----------
Napsal mic362;500917
Ajo :)
jinak jsem to zkusil vypocist takto:
$b = (550 * round(10/(10+100)*10000) * 3)/10000;
echo round($b,2);
Výsledek je 149,99
Takhle to ale nejde, tam právě chybí to zaokrouhlení na 4 desetinný místa...
22. 4. 2010 15:48:29
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495234
Vít Michalek
verified
rating uzivatele
(14 hodnocení)
22. 4. 2010 15:51:45
$b = (550 * round(10/(10+100)*10000) * 3)/10000;
echo round($b,2);
Výsledek je 149,99
Tohle ti zaokrouhlí správně, 10 je tedy DPH, a tech 10000 co tam mám to je zaokrouhlení na 4 desetinna mista :)
Ale stejne 149,99 = 150 ne? takže když to daš takto:
$number = 550 * (10/(10+100) * 3;
Tak ti to výjde 150
22. 4. 2010 15:51:45
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495233
meloun
verified
rating uzivatele
(5 hodnocení)
22. 4. 2010 15:53:52
Napsal mic362;500925
$b = (550 * round(10/(10+100)*10000) * 3)/10000;
echo round($b,2);
Výsledek je 149,99
Tohle ti zaokrouhlí správně, 10 je tedy DPH, a tech 10000 co tam mám to je zaokrouhlení na 4 desetinna mista :)
Ale stejne 149,99 = 150 ne? takže když to daš takto:
To je sice hezký, ale jelikož jsi to nezaokrouhlil na ty 4 desetinný místa (což koef. DPH musí být), vyjde DPH u jiných čísel špatně...
22. 4. 2010 15:53:52
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495232
Vít Michalek
verified
rating uzivatele
(14 hodnocení)
22. 4. 2010 15:56:22
Ale ten muj příklad v sobě má zaokrouhlená na 4 desetinná místa. to je to *10000 pak round a pak to podělí zase 10000. A do proměnné dostaneš správně číslo 149.985 nic víc
22. 4. 2010 15:56:22
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495231
meloun
verified
rating uzivatele
(5 hodnocení)
22. 4. 2010 15:59:07
Napsal AlesiBoss;500910
to ej klasicka vlatsnost vypoctu s floatem - v promenne je ulozeno pro stroj neco jako 149.984999999999999999999
Díky moc, tohle mi pomohlo --> udělal jsem z toho string a tím to zafixoval jako hodnotu:
22. 4. 2010 15:59:07
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495230
Vít Michalek
verified
rating uzivatele
(14 hodnocení)
22. 4. 2010 16:02:06
Tento $b = (550 * round(10/(10+100)*10000) * 3)/10000;
echo round($b,2);
i tento
$number = 550 * round(10/(10+100), 4) * 3;
echo $number; // 149.985
$str = "{$number}";
echo round($str, 2) ; // 149.99
echo round($number, 2) ; // 149.98
Mají stejný výsledek :)
Jen ten muj je kratší, bez toho mezikroku $str
22. 4. 2010 16:02:06
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495229
meloun
verified
rating uzivatele
(5 hodnocení)
22. 4. 2010 16:22:23
To ano, ale jelikož je tam pořád round() uprostřed, bál bych se, že v jiném případě nastane zase ten problém...
22. 4. 2010 16:22:23
https://webtrh.cz/diskuse/nejde-mi-zaokrouhlovat-v-php/#reply495228
Pro odpověď se přihlašte.
Přihlásit