/ Forside / Teknologi / Udvikling / PHP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
PHP
#NavnPoint
rfh 3959
natmaden 3372
poul_from 3310
funbreak 2700
stone47 2230
Jin2k 1960
Angband 1743
Bjerner 1249
refi 1185
10  Interkril.. 1146
Håndtere simple matematiske formler
Fra : Jonas Delfs


Dato : 12-12-05 23:54

Hej -

Jeg har nogle simple formler som skal bruges i et script til at rette nogle
tal af, alt efter hvilket "apparat" brugeren har pustet i for at få tallet.

Hvordan får jeg sat det pågældende tal, lad os sige $tal = 500, ind i
formlen
((X^2*0.000859)+(X*0.4009)+31.197)
og så regnet resultatet ud?

Formlerne forefindes i en MySQL database, så jeg har dem vel nødvendigvis i
tekst-format? Har eksperimenteret med at behandle det som en simpel
tekst-streng, men kan så ikke få det regnet ud?

Alle gode idéer vil blive værdsat:)

Mvh. Jonas



 
 
Rasmus Grouleff (13-12-2005)
Kommentar
Fra : Rasmus Grouleff


Dato : 13-12-05 01:33

Jonas Delfs wrote:
> Hvordan får jeg sat det pågældende tal, lad os sige $tal = 500, ind i
> formlen
> ((X^2*0.000859)+(X*0.4009)+31.197)

Følgende eksempel skulle virke (jeg har dog ikke afprøvet det):

<?php

$tal = 500;
$formel = str_replace('X','$tal','((X^2*0.000859)+(X*0.4009)+31.197)');
$resultat = eval('return '.$formel);
echo 'resultatet er '.$resultat;

?>

/Rasmus

--
"Ten beers are fun, one is just plain stupid"

Jonas Delfs (13-12-2005)
Kommentar
Fra : Jonas Delfs


Dato : 13-12-05 23:00

"Rasmus Grouleff" <spammelikecrazy@nerdd.dk> skrev i en meddelelse
news:zEonf.449$TT.448@news.get2net.dk...
> Følgende eksempel skulle virke (jeg har dog ikke afprøvet det):
>
> <?php
>
> $tal = 500;
> $formel = str_replace('X','$tal','((X^2*0.000859)+(X*0.4009)+31.197)');
> $resultat = eval('return '.$formel);
> echo 'resultatet er '.$resultat;
>
> ?>

Super!
Jeg har fuld kontrol over både formler og tal, så eval() er en fin løsning,
og også det første jeg prøvede af. Jeg havde dog lige misset det med 'return
', men det er selvfølgelig klart hvorfor det er nødvendigt.

Jeg takker!

Mvh. Jonas



Jacob Atzen (13-12-2005)
Kommentar
Fra : Jacob Atzen


Dato : 13-12-05 07:54

On 2005-12-12, Jonas Delfs <jonas@NOSPAMdelfs.dk> wrote:
> Jeg har nogle simple formler som skal bruges i et script til at rette nogle
> tal af, alt efter hvilket "apparat" brugeren har pustet i for at få tallet.
>
> Hvordan får jeg sat det pågældende tal, lad os sige $tal = 500, ind i
> formlen
> ((X^2*0.000859)+(X*0.4009)+31.197)
> og så regnet resultatet ud?
>
> Formlerne forefindes i en MySQL database, så jeg har dem vel nødvendigvis i
> tekst-format? Har eksperimenteret med at behandle det som en simpel
> tekst-streng, men kan så ikke få det regnet ud?

Den avancerede loesning er at lave en parser, der bygger et syntakstrae
og derefter evaluere syntakstraet. Det er god muligvis overkill, hvis du
kan noejes med den allerede foreslaaede eval metode.

--
Med venlig hilsen
- Jacob Atzen

Peter Brodersen (13-12-2005)
Kommentar
Fra : Peter Brodersen


Dato : 13-12-05 09:18

On 13 Dec 2005 06:54:15 GMT, Jacob Atzen <jacob@aub.dk> wrote:

>Den avancerede loesning er at lave en parser, der bygger et syntakstrae
>og derefter evaluere syntakstraet. Det er god muligvis overkill, hvis du
>kan noejes med den allerede foreslaaede eval metode.

eval() er temmeligt farligt, hvis man ikke har godt kontrol over
inputtet (fx hvis folk selv kan indtaste formler eller selv kan
indtaste værdien for X, uden den bliver tjekket) kombineret med at man
ikke kan stole på brugerne.

Hvis de formler er er forudindtastet og godkendt, og inputtet for X
valideret, så kan simpel søg&erstat måske være nok. Der skal dog nok
et regulært udtryk eller lignende til for at erstatte fx 3^2 med
POW(3,2).
--
- Peter Brodersen

Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste