Autor Zpráva
meca
Profil
Tak přátelé, a tady vidíte, proč nesnášim dělání webů na zakázky. Zadavatel si vymyslel šílený zaokrouhlování - vždy nahoru na padesátníky. Takže 63.3 = 63.50, 63.68 = 64. Vymyslel jsem si na to tedy takovou šílenou fci:

function zaorouhlovani ($cena) {
$cislo=round($cena,2);
$halire=explode(".", $cislo);

$jakocislo="$halire[1]";
if (strlen($jakocislo)==1) {
$halire[1]=$halire[1].'0';
}

if ($halire[1]<'50' && $halire[1]>'0') {
$halir='50';
} else if ($halire[1]>'50' && $halire[1]<='99') {
$halir='0';
$pricist='1';
}

$cena=$halire[0]+$pricist;
if ($halir!='0') $cena.='.'.$halir;

return Number_format($cena, 2, ".", " ");
}

Ale teď problém: v nákupním košíku bych potřeboval sečíst jednotlivý ceny; avšak už musí být zaorkouhlené. Tudíž bych potřeboval sečíst třeba 65 500.50 + 61 508.50 - avšak s tím si PHP neporadí a sečte 65+61 - odstranit pro ten účel tu mezeru není problém, horší už je to s tou desetinou čárko...

Tudíž se ptám, zda nemáte nějaký nápad. Nebo jak se v PHP oděluje ona celá cifra od těch desetiných šťufliků?

Děkuji mockrát.
djlj
Profil
Teď jsem chvíli hledal v manuálu; nepomohly by BCMath funkce pro výpočty s libovolnou přesností? Samozřejmě za předpokladu, že máš možnost si ty funkce povolit…

Nebo nestačilo by před výpočtem udělat (float)$promenna?
meca
Profil
Ha, už sem na to přišel... Udělal jsem si další funkci úplně stejnou jako to zaorouhlovani, akorátže sem z toho vyflus ten float bez mezer. Pak sem to posčítal a nakonec vypsal sformátované pouze skze Number_format.

Ehm, sám to moc nechápu ;))

Díky, djlj ;)
DoubleThink
Profil *
Základ je držet v proměnných vždy nezformátované číslo - tedy float. To pak až při vypisování formátovat.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: