Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno [PHP] Problém s převodem řetězce na číslo

Dobrý den, mam takový problém. Potřeboval bych nějakým způsobem v PHP převést řetězec obsahující zlomek na číslo tak aby se s ním dalo dále počítat. Uvedu příklad:

$a = '-1/3';
echo $a * 2; // vrátí -2, což je špatně

Pokud ale zlomek zadám přímo do kódu jako číslo, spočítá se to správně.

echo -1/3 * 2; // vrátí -0.666666666667

Ve skutečnosti se počítá s dvourozměrným polem plným hodnot (i zlomků) a je s ním potředa provádět různé operace, což ale nejde protože se jedná o řetězce.
Zkusil sem různé způsoby převodu ale nic nevedlo ke kloudnému konci.

$a = '-1/3';
echo (float) $a;           //vrátí -1
echo settype($a, 'float'); //vrátí 1

Děkuji za jakoukoliv konstruktivní radu jak toto udělat. :-)

Předmět Autor Datum
$x = explode('/',$a); echo $x[0]/$x[1]; mozna prasarna, ale fungovat to bude
foltyn 10.01.2007 18:09
foltyn
Mrkni na funkci eval(), myslím, že by to mohlo být ono.
host 10.01.2007 18:17
host
Tisíceré díky. Sice je to řešení trošku prasácké ale přez ten eval() to šlo. Upravil jsem to takto:…
Marvin 10.01.2007 18:42
Marvin
Nie je to prasacke je to presne na to, to co chces totiz ide urobit jedine nejakym inteligentnym par…
MM.. 10.01.2007 18:49
MM..
Jj, dobrá připomínka. Budu to muset nějak ošetřit. ;-)
Marvin 10.01.2007 18:54
Marvin
Ak to chces mat bezpecnejsie a budu tam vzdy len zlomky, tak to co pisal foltyn je bezpecnejsie (roz…
MM.. 10.01.2007 18:56
MM..
Proč zapisuješ zlomek jako řetezec ? Nemůžeš jej zapsat přímo jako: $a = -1/3; // ? Vyjímkou je s… poslední
Flash_Gordon 10.01.2007 21:19
Flash_Gordon

Nie je to prasacke je to presne na to, to co chces totiz ide urobit jedine nejakym inteligentnym parserom (u eval pouzijes parser samotneho php serveru), nemozes predsa len tak pretypovat text vyrazu na cislo ako si to robil v otazke...
Akurat si treba dat pozor ze ak by si mal nahodou to $a ako uzivatelsky vstup napr. z internetu od klienta, tak si to treba predtym osetrit nech tam hacker nenacpe rovno nejaky vlastny php script ktory ti zmaze cely server :))

Ak to chces mat bezpecnejsie a budu tam vzdy len zlomky, tak to co pisal foltyn je bezpecnejsie (rozdeli ten retazec na dve podretazce pred a za lomitkom a tie sa daju previest na cisla, kedze su to potom uz len jednoduche cisla).
P.S. ale testoval by som aj tak pred tym delenim asi aj ze ci menovatel nie je nula apod.

Zpět do poradny Odpovědět na původní otázku Nahoru