[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.
$x = explode('/',$a);
echo $x[0]/$x[1];
mozna prasarna, ale fungovat to bude
Mrkni na funkci eval(), myslím, že by to mohlo být ono.
Tisíceré díky. Sice je to řešení trošku prasácké ale přez ten eval() to šlo. Upravil jsem to takto:
Máš u mě a ještě jednou díky.
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
Jj, dobrá připomínka. Budu to muset nějak ošetřit.
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.
Proč zapisuješ zlomek jako řetezec ?
Nemůžeš jej zapsat přímo jako:
Vyjímkou je samozřejmě případ kdy tento zlomek bereš někde od uživatele z formuláře.....