Autor Zpráva
mardon
Profil
Snažím se do PHP načist XML výstup, kde obsahem XML je informace nazev, cena apod
XML mám načtené v proměnné $item typu object , jednotlivé položky jsou pak v atributech
$item['cena'] 
, které jsou typu string
Teď ,a le potrebuji cenu uložit do db
takže mám toto:
$cena = $item['cena'];
$cena =$cena*1.25;


cena se mi ale nevypočítá správně, je potřeba nějak přetypovat $item['cena']?
Majkl578
Profil
Co znamená "cena se mi ale nevypočítá správně"? Přetypování se provádí automaticky. Navíc počítání s typem float přináší jistou míru nepřesnosti...
mardon
Profil
no mam tam mapř. 49.9000*1.25 mi dá výsledek 61.25 místo očekávaných 62.375
mardon
Profil
takže celý problém je zřejmě způsoben tím, že řetězec
$item['cena']
obsahuje desetinná místa a ta jsou při násobení uříznuta
AM_
Profil
pokud je oddělovač desetinných míst opravdu tečka a ne čárka, mělo by to brát správně. Je ale možné, že tvá instalace PHP respektuje české prostředí a naopak tam chce čárku, tak si s tím zkus pohrát. Jinak ale jsem se nikdy nesetkal s problémem při převodu desetinných čísel ze stringu.
Zkusil jsem si to, a:
echo (float)"4.7";
echo "4.7"*1;
obojí mi vypsalo 4.7, takže problém s konverzí opravdu není.
Majkl578
Profil
AM:
To je dost možné, jelikož:
var_dump('49,9000'*1.25);

vrací 61.25.
;)
mardon
Profil
to nějak nechápu mám v tom řetězci tečku, ale on tam vidí čárku a proč ji teda nevidí v čísle 1.25?

Ještě mailnkatý dotaz , jak zjistím to nastavení českého prostředí v PHP?
nightfish
Profil
mardon:
to nějak nechápu mám v tom řetězci tečku, ale on tam vidí čárku a proč ji teda nevidí v čísle 1.25?
pokud tam máš tečku, tak nemá důvod vidět tam čárku
zkus
$cena = str_replace(',', '.', $item['cena']);
$cena = $cena * 1.25;

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: