Mit den Grundoperatoren +, -, * und / kommt man in PHP weit, aber sobald Vorzeichen, Potenzen oder Wurzeln ins Spiel kommen, lohnt sich ein Blick auf die eingebauten Math-Funktionen. PHP abs liefert den Betrag, pow() rechnet Potenzen, sqrt() zieht Wurzeln, fmod() erledigt den Float-Modulo und intdiv() die ganzzahlige Division. Dieses Tutorial zeigt alle fünf Funktionen kompakt zusammen, mit Beispielen aus Distanz-Rechnung, Modulo und Karton-Logik.
Was leisten die PHP-Math-Funktionen?
Wer in PHP rechnet, kommt mit den Operatoren +, -, * und / weit. Sobald aber Vorzeichen, Potenzen, Wurzeln oder Modulo ins Spiel kommen, lohnt es sich, die eingebauten Math-Funktionen zu kennen. PHP abs liefert den Betrag, pow() rechnet Potenzen, sqrt() zieht Wurzeln, fmod() berechnet den Float-Modulo und intdiv() liefert eine ganzzahlige Division ohne Rest. Diese fünf Math-Funktionen decken den Alltag in PHP-Skripten ab. Dieses Tutorial bringt die fünf Funktionen kompakt zusammen und zeigt sie an Beispielen aus Distanz-Berechnung, Karton-Logik und einfacher Statistik.

Bevor es an die einzelnen Funktionen geht, lohnt sich ein kurzer Blick auf den Einsatzbereich.
Diese Sammlung versteht sich als Überblick für den Alltag. Wer eine sehr ausführliche Behandlung von abs() als Einzelfunktion sucht, findet sie im bestehenden abs-Tutorial mit den absoluten Wert einer Zahl ermitteln. Hier geht es um das Zusammenspiel der wichtigsten Funktionen und um typische Anwendungsmuster, in denen sie gemeinsam auftauchen.
PHP abs() für den absoluten Betrag
PHP abs macht aus einer negativen Zahl eine positive und lässt eine positive unverändert. Der Rückgabetyp entspricht dem Eingabetyp: ein Integer rein, ein Integer raus, ein Float rein, ein Float raus.
<?php
echo abs(-7); /* 7 */
echo abs(-3.14); /* 3.14 */
echo abs(42); /* 42 */
echo abs(0); /* 0 */
Im Alltag kommt PHP abs vor allem in Differenz-Berechnungen vor. Wenn unklar ist, welcher von zwei Werten größer ist, schreibt man abs($a - $b) und bekommt zuverlässig den positiven Abstand. Auch bei Toleranz-Vergleichen (abs($soll - $ist) < 0.001) ist die Funktion praktisch.
pow() und der Operator ** für Potenzen
PHP abs ist nur eine von mehreren Math-Funktionen, die im Alltag zählen. pow() rechnet Basis hoch Exponent. Seit PHP 5.6 gibt es den Operator ** als gleichwertige Kurzschreibweise. Beide erzeugen dasselbe Ergebnis, der Operator ist nur kompakter.
<?php
echo pow(5, 2); /* 25 */
echo 5 ** 2; /* 25, kompakter */
echo pow(2, 10); /* 1024 */
echo pow(8, 1/3); /* ungefaehr 2 (Kubikwurzel) */
echo pow(10, -2); /* 0.01 */
Negative Exponenten liefern Brüche, gebrochene Exponenten liefern Wurzeln. Wer häufig Quadrate rechnet, wird ** als Standard wählen, weil es bei 5 ** 2 + 3 ** 2 deutlich besser lesbar ist als pow(5, 2) + pow(3, 2). Bei sehr großen Werten kann pow() allerdings den Float-Bereich sprengen und INF liefern. Wer mit beliebig großen Zahlen rechnet, ist mit den BCMath-Funktionen wie bcpow() oder den GMP-Funktionen besser bedient.
sqrt() und Pythagoras-Distanz
Wer PHP abs in Distanz-Berechnungen nutzt, kombiniert es oft mit Wurzeln. sqrt() zieht die Quadratwurzel und liefert immer einen Float. Klassisches Anwendungsbeispiel ist die Distanz zwischen zwei Punkten in einer Ebene, also der Satz des Pythagoras.
<?php
function distanz(float $x1, float $y1, float $x2, float $y2): float
{
return sqrt(pow($x2 - $x1, 2) + pow($y2 - $y1, 2));
}
echo distanz(0, 0, 3, 4);
/* 5 */
Die Funktion lässt sich leicht erweitern auf 3D (+ pow($z2 - $z1, 2)) oder auf eine Geo-Distanz (Haversine-Formel mit Trigonometrie). sqrt() von negativen Zahlen liefert NAN, weil reelle Wurzeln nur für nicht-negative Werte definiert sind. Wer das Ergebnis weiterverarbeitet, sollte mit is_nan() prüfen, ob ein gültiger Wert herauskam.
flowchart TD
A[Eingabezahl] --> B{Welche Operation?}
B -->|abs| C[Vorzeichen entfernen]
B -->|pow| D[Potenzieren]
B -->|sqrt| E[Wurzel ziehen]
B -->|fmod| F[Float-Modulo]
B -->|intdiv| G[Ganzzahlige Division]
C --> H[Ergebnis]
D --> H
E --> H
F --> H
G --> H
fmod() vs der Operator % für Modulo
Neben dem Vorzeichen-Thema kommt oft die Frage nach Modulo dazu. PHP kennt zwei Wege, einen Rest zu berechnen. Der Operator % arbeitet mit Integern und liefert den klassischen Modulo. fmod() arbeitet mit Float-Werten und ist die richtige Wahl, sobald Komma-Zahlen ins Spiel kommen.
<?php
echo 10 % 3; /* 1 (Integer-Modulo) */
echo fmod(10.5, 3); /* 1.5 (Float-Modulo) */
echo fmod(7, 2.5); /* 2.0 */
Wer % auf Float-Werte anwendet, bekommt eine implizite Cast-Konvertierung auf Integer. Aus 10.5 % 3 wird intern 10 % 3 = 1, der Komma-Anteil geht verloren. Bei Ressourcen-Zählern oder Geld-Beträgen, die in Cents gerechnet werden, ist % völlig in Ordnung, weil dort ohnehin nur Integer im Spiel sind. Bei Messreihen oder Sensordaten in Float ist fmod() Pflicht.
intdiv() für ganzzahlige Division
PHP abs und intdiv() begegnen sich oft in derselben Berechnung. intdiv() liefert das Ergebnis einer Division als Integer und schneidet alle Nachkommastellen ab. Das ist genau das, was man braucht, wenn die Frage lautet: "Wie oft passt die kleinere Zahl in die größere?".
<?php
$bestellt = 47;
$proKarton = 12;
$kartons = intdiv($bestellt, $proKarton);
$rest = $bestellt % $proKarton;
echo "$kartons Kartons + $rest lose Stück";
/* 3 Kartons + 11 lose Stueck */
Bei negativen Zahlen schneidet intdiv() Richtung Null ab, nicht zur nächstniedrigeren Ganzzahl. Das ist ein wichtiger Unterschied zu mathematischem Floor.
<?php
echo intdiv(7, 2); /* 3 */
echo intdiv(-7, 2); /* -3 (Richtung Null), nicht -4 */
echo intdiv(7, -2); /* -3 */
/* Floor zum Vergleich */
echo (int) floor(-7 / 2); /* -4 */
Wer das mathematische Floor-Verhalten braucht, nutzt (int) floor($a / $b). Eine ausführliche Erklärung des Floor-Verhaltens findet sich im floor-Tutorial. Bei Division durch Null wirft intdiv() einen DivisionByZeroError, das ist seit PHP 8.0 das Standard-Verhalten.
Stolperfallen und Best Practices
Drei Punkte verdienen besondere Aufmerksamkeit. Wer PHP abs und seine Verwandten produktiv einsetzt, sollte sie kennen. Erstens: pow() liefert bei sehr großen Ergebnissen INF. Wer Werte oberhalb von rund 1.7e308 erwartet, sollte BCMath oder GMP nutzen. Mit is_infinite() lässt sich prüfen, ob der Float-Bereich gesprengt wurde.
Zweitens: sqrt(-1) ist NAN und nicht false. Wer das Ergebnis in einer if-Prüfung verwendet, sollte explizit mit is_nan() testen. NAN hat die unangenehme Eigenschaft, dass NAN === NAN zwar true ist, der mathematische Vergleich aber NAN == NAN false liefert. Konsequenter Strikt-Vergleich plus is_nan() ist die sichere Variante.
Drittens: Die Präzedenz von ** ist rechtsassoziativ. 2 ** 3 ** 2 wird als 2 ** (3 ** 2) = 2 ** 9 = 512 ausgewertet, nicht als (2 ** 3) ** 2 = 64. Wer es eindeutig haben will, setzt Klammern.
<?php
echo 2 ** 3 ** 2; /* 512 */
echo (2 ** 3) ** 2; /* 64 */
Im Code-Review ist die explizite Klammer immer die bessere Wahl, weil sie auch für Leser klar ist, die die Präzedenz nicht im Kopf haben.
Fazit zu PHP abs
Die fünf Funktionen abs(), pow(), sqrt(), fmod() und intdiv() decken den Löwenanteil der Mathematik in PHP-Skripten ab. PHP abs liefert Beträge, pow() und ** rechnen Potenzen, sqrt() zieht Wurzeln, fmod() ist der Float-Modulo und intdiv() liefert ganzzahlige Divisionen. Wer das Verhalten bei negativen Zahlen, NaN und INF kennt, baut robuste Berechnungen für Distanz, Statistik und Mengen-Logik. Bei sehr großen Zahlen oder kritischen Geld-Berechnungen sind BCMath oder GMP die bessere Wahl, für den Alltag reichen die eingebauten Funktionen vollkommen aus.