Anzeige
Tutorialbeschreibung

Rechnen mit PHP: Grundrechnungsarten, Modulo, runden, eval() …

Rechnen mit PHP: Grundrechnungsarten, Modulo, runden, eval() …

Naja wird der Leser denken, das wird ein einfaches Tutorial und der Autor hat sich auch nicht besonders anstrengen müssen!

PHP versteht nun mal die Grundrechnungsarten, noch dazu mit den plausiblen Operatoren + für Addition, - für Subtraktion, * für Multiplikation und last but not least den Schrägstrich / für die Division; ja das wäre wirklich kaum erwähnenswert, wären da nicht doch einige Sachen, die man besser erörtert, bevor man sie benötigt.


Tatsächlich einfach, der Vollständigkeit halber ein kleines Beispiel:

<?
$a=3;
$b=5;
$a + $b = $c;
echo $c; //klar wird 8 ausgegeben
?>

Natürlich setze ich diesen Code nicht mit allen Grundrechnungsarten fort, das kann jeder selbst :).

Also stürzen wir uns gleich in die interessanteren (schwierigeren?) Details:

1. Das Prozentzeichen %:
Natürlich kennen wir es alle, aber dient es in PHP zum Prozentrechnen? NEIN! Was ist es dann? Es ist das Zeichen für Modulo. Mit Recht werden Sie fragen, was ist das nun wieder? Antwort: Das Ermitteln der ‚Restklasse’  in der Mathematik! Nun werden Sie sagen, das ist ja wohl auch keine Erklärung.
Zugegeben, substantiiert ist das nicht, aber Moment, es wird sofort anhand eines Beispiels:
7%3=1  was heißt das nun?
Sprachlich sagt man: 7 modulo 3 = 1.
Das heißt nichts anderes, als dass 3 in 7 = 2 * 3 + 1 (1 ist unser zu ermittelnder Modulo = Restklasse)

Wozu das in PHP?
Es gibt für Modulo verschiedenste Anwendungsfälle, der bekannteste ist der Wochentag, also wenn z.B.: der Sonntag die Restklasse 0 hat, dann ist immer Mittwoch wenn Restklasse 3 ermittelt wird, die Woche hat bekanntlich 7 Tage.

Also wenn ich wissen will, welcher Wochentag der 15. Tag im Jahr ist,  das am 1. 1. mit einem Sonntag begann, dann ermittle ich das am Besten mit folgendem PHP-Code:

<?php
$w=15%7;
$text='Der 15.Tag im <b>Jahr, das mit einem Sonntag begann</b>, ist ein';
if ($w=='0'){echo $text.' Sonntag';}
elseif ($w=='1'){echo $text.' Montag';}
elseif ($w=='2'){echo $text.' Dienstag';}
elseif ($w=='3'){echo $text.' Mittwoch';}
elseif ($w=='4'){echo $text.' Donnerstag';}
elseif ($w=='5'){echo $text.' Freitag';}
else {echo $text.' Samstag';}?>


… oder der 55. Tag im Jahr (einfach 15 durch 55 ersetzen):

<?php
$w=55%7;
$text='Der 55.Tag im <b>Jahr, das mit einem Sonntag begann</b>, ist ein';
if ($w=='0'){echo $text.' Sonntag';}
elseif ($w=='1'){echo $text.' Montag';}
elseif ($w=='2'){echo $text.' Dienstag';}
elseif ($w=='3'){echo $text.' Mittwoch';}
elseif ($w=='4'){echo $text.' Donnerstag';}
elseif ($w=='5'){echo $text.' Freitag';}
else {echo $text.' Samstag';}?>

Voila! Ein Samstag!

Eine andere Frage wird auch mit Modulo beantwortet, nämlich, ob die eingegebene Zahl eine gerade oder ungerade Zahl ist!
Wie das geht ist klar, ergibt Modulo 0, also bleibt 0 Rest, bei Modulo2, dann liegt eine gerade Zahl vor, wenn der Rest 1 ist, dann ist eine ungerade Zahl gegeben:

Beispielcode:
<?php
$x=5%2;
if ($x=='1'){echo '<br>Die Zahl 5 ist eine ungerade Zahl';}
else{echo '<br>Die Zahl 5 ist eine gerade Zahl';}?>

Oft macht es auch Probleme mit Variablen (die etwa zahlreich mit $_POST oder $_GET übergeben werden müssen) zu rechnen (insbesondere wenn Klammerausdrücke notwendig sind [z.B.: weil man ‚Strich-’ VOR ‚Punktrechnung’ rechnen will]). Im Zweifel hilft dann die Funktion eval()!


Zunächst schauen wir einmal, was das PHP-Handbuch dazu sagt:
http://at2.php.net/manual/de/function.eval.php.

Ehrlich gesagt, ich wusste nach dem Tipp nicht genau, was ich damit bei meinem Rechenproblem damit machen sollte, aber es gibt immer nur Antworten, wenn man oft genug fragt, was ich dann tat:

Beispielcode (hier mit einem Beispiel, das nicht bugged, aber zeigt, dass eval() zum selben Ergebnis führt [also, wenn es mal mit einem Rechenbeispiel doch einen parse-error gibt und alle Ursachen {fehlende Zeichen etc.} beseitigt sind, eval() versuchen!]):

<?php
$x=5;
$y=7;
$c=$x+$y;
echo '<br>'.$c.'<br>';

$x=5;
$y=7;
eval('$c=$x+$y;');
echo $c;
?>

EXKURS:

Es ist Ihnen bestimmt nicht entgangen, dass noch eine Reihe von mathematischen Möglichkeiten bestehen würden, die man erörtern kann, aber das würde (wie so oft) den Rahmen dieses Tutorials sprengen. Also beschränke ich mich auf noch 2 Punkte:
1. Im PHP-Handbuch finden Sie (übrigens praktisch und aussagekräftig) ALLE mathematischen Funktionen, die PHP leistet, unter: http://at2.php.net/math
2. auf einige restliche Dinge, die trotz der Umfänglichkeit dieses Tutorials gesagt werden sollten:
• PROZENTRECHNUNG: Sie ist einfacher, als man zunächst glauben mag (Sonderfunktion in PHP gibt es dafür nicht):
<?php 
$prozent= 20/100*20;
echo ’20 % von 20 sind ’.$prozent;?>

WURZELZIEHEN, POTENTIEREN UND RUNDEN: ich schreibe hier nur mehr die Codes dafür, sie sollten sich selbst erklären:
<?php
$x=5;
$y=7;
$c=$x+$y;
echo '<br>'.$c.'<br>';

$x=5;
$y=7;
eval('$c=$x+$y;');
echo $c;
echo '<br><br>Quadratwurzelziehen!<br>';
$wurzel=sqrt(4);
echo $wurzel.' = die Quadratwurzel aus 4';

echo '<br><br>3. Wurzel ziehen!<br>';
$wurzel1=pow(4,1/3);
echo $wurzel1.' = die 3. Wurzel aus 4';

echo '<br><br>Potenzieren!<br>';
$potenz=pow(4,3);
echo $potenz.' = die 3. Potenz aus 4 (4 hoch 3)<br><br>';
?>

Wenn wir uns jetzt den Wert der 3. Wurzel ansehen, fällt auf, dass er aus vielen (oft unnötigen, weil nicht mehr aussagekräftigen) Dezimalstellen besteht, mit der Funktion round() können wir diese Zahl übersichtlich machen!
<?php 
$wurzel2=round($wurzel1, 3) //auf 3 Dezimalstellen reduziert
$wurzel3=round($wurzel1, 2) //auf 2 Dezimalstellen reduziert
?>

So! Ich hoffe, das dieses kleine Tutorial ab und zu helfen wird :).


Kommentare
Achtung: Du kannst den Inhalt erst nach dem Login kommentieren.
Portrait von Mainclain
  • 30.09.2009 - 12:26

Jap das mit eval ist wirklich ein "schlechter" einfall, sowie ich es gehört hab, kann man damit sogar (bei "passender" config) den Server deutlich beschädigen (Inhaltmäßig)

Sonsten bissel alt, gilt zwar noch, aber naja, nichts aufregendes für mich (Dennoch schön die Grundlagen "gezeigt" zu bekommen.)

Portrait von Christian
  • 17.10.2008 - 17:29

Du solltest noch anführen, dass die Funktion eval() nicht umsonst evil() genannt wird. Es ist böse diese Funktion zu benutzen, denn man kann in so gut wie allen Fällen eine explizite Schreibweise nutzen. Bei gezielter Manipulierung der Funktionsparameter kann man ALLES, ich wiederhole und betone, ALLES mögliche ausführen lassen. Also eval am besten Streichen, eval ist bööööse.
PS: Bitte das nächste mal die BBCodes zur Formatierung nutzen, danke.

Alternative Portrait
-versteckt-(Autor hat Seite verlassen)
  • 07.04.2007 - 11:52

Keine schlechte Idee, aber für das INet ist das nichts.

Portrait von erti
  • 09.04.2007 - 12:33

Wie bitte? Warum sollte das nichts fürs Internet sein? Du weißt schon, dass PHP für das Netz entwickelt worden ist?!
Außerdem ist es wohl in fast jedem Script notwendig zu rechnen! ;)

x
×
×