|
| 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
| |
|
|