Signatur
Beschreibung
fdiv() führt eine Gleitkomma-Division gemäß dem IEEE 754-Standard durch. Im Gegensatz zum normalen Divisionsoperator / wirft fdiv() keinen Fehler und erzeugt keine Warnung, wenn der Divisor 0.0 ist. Stattdessen wird ein spezieller IEEE-754-Wert zurückgegeben: INF (positiv unendlich), -INF (negativ unendlich) oder NAN (Not a Number).
Diese Funktion ist besonders nützlich in mathematischen Berechnungen, bei denen Division durch null nicht ausgeschlossen werden kann und ein sicherer Umgang mit Sonderfällen ohne aufwendige Vorprüfungen gewünscht ist. Die zurückgegebenen Sonderwerte lassen sich anschließend mit is_nan(), is_infinite() oder is_finite() überprüfen.
Vor PHP 8.0 musste man entweder selbst gegen null prüfen oder @-Fehlerunterdrückung einsetzen, um Warnungen bei Division durch null zu vermeiden. fdiv() schafft hier eine saubere, standardkonforme Alternative. Zu beachten ist, dass sowohl Zähler als auch Nenner als float behandelt werden, sodass Ganzzahlen automatisch konvertiert werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | float | Der Dividend (Zähler) der Division. | |
| $num2 Pflicht | float | Der Divisor (Nenner) der Division. Darf 0.0 sein; in diesem Fall wird ein IEEE-754-Sonderwert zurückgegeben. |
Rückgabewert
float zurück. Bei Division durch null: INF wenn num1 > 0, -INF wenn num1 < 0, und NAN wenn num1 === 0.0.Beispiele
Grundlegende Verwendung von fdiv()
<?php
var_dump(fdiv(10, 2)); // Normale Division
var_dump(fdiv(10, 0)); // Positiv unendlich
var_dump(fdiv(-10, 0)); // Negativ unendlich
var_dump(fdiv(0, 0)); // NAN
var_dump(fdiv(-0.0, 0)); // NAN
Sicherer Einsatz in einer Berechnung mit Prüfung des Ergebnisses
<?php
function berechneDurchschnitt(float $summe, float $anzahl): string {
$ergebnis = fdiv($summe, $anzahl);
if (is_nan($ergebnis)) {
return 'Ungültig (0 / 0)';
}
if (is_infinite($ergebnis)) {
return 'Unendlich (Division durch null)';
}
return 'Durchschnitt: ' . number_format($ergebnis, 2);
}
echo berechneDurchschnitt(150, 5) . PHP_EOL; // Normal
echo berechneDurchschnitt(100, 0) . PHP_EOL; // Division durch null
echo berechneDurchschnitt(0, 0) . PHP_EOL; // 0 / 0
Vergleich mit dem / Operator
<?php
// Normaler Divisionsoperator wirft in PHP 8 einen DivisionByZeroError
try {
$a = 10 / 0;
} catch (\DivisionByZeroError $e) {
echo 'Fehler: ' . $e->getMessage() . PHP_EOL;
}
// fdiv() hingegen gibt IEEE-754-Sonderwerte zurück
$b = fdiv(10, 0);
var_dump($b); // float(INF) — kein Fehler
// Wichtig · Fallstricke
Hinweis zu PHP 8.0+: Der /-Operator wirft bei ganzzahliger Division durch null einen DivisionByZeroError. Bei Gleitkomma-Divisionen durch 0.0 liefert / jedoch bereits INF oder NAN ohne Ausnahme — fdiv() vereinheitlicht dieses Verhalten explizit für alle Fälle und macht die Absicht im Code klar lesbar.
Die Funktion konvertiert beide Parameter intern zu float. Achte darauf, dass sehr große oder sehr kleine Zahlen zu Gleitkomma-Genauigkeitsverlusten führen können, was unabhängig von fdiv() selbst ist.