floor()
Die PHP-Funktion floor() rundet eine Zahl auf die nächste ganze Zahl ab – immer in Richtung negativer Unendlichkeit.
Die Funktion floor() in PHP rundet eine Zahl nach unten auf die nächste ganze Zahl – das heißt, sie gibt die größte ganze Zahl zurück, die kleiner oder gleich dem übergebenen Wert ist. „Nach unten" bedeutet hier immer in Richtung negativer Unendlichkeit, was die meisten Menschen falsch verstehen. Diese Seite behandelt die Syntax, das Verhalten von floor() bei positiven und negativen Zahlen, den Rückgabetyp und wann man floor() anstelle von ceil(), round() oder intdiv() verwenden sollte.
Syntax
floor(int|float $num): float$num— der abzurundende Wert. Er kann einintoder einfloatsein.- Rückgabewert — das Ergebnis wird immer als
floatzurückgegeben, auch wenn es eine ganze Zahl darstellt.floor(7)liefert also7.0, nicht7. Wenn Sie einen echten Integer benötigen, casten Sie das Ergebnis:(int) floor($num).
Ein einfaches Beispiel
Wir weisen $number einen float zu, übergeben ihn an floor(), und die Funktion gibt 3 zurück – die größte ganze Zahl, die nicht größer als 3.14 ist. Alles nach dem Dezimalpunkt wird bei positiven Zahlen einfach verworfen.
Wie floor() mit negativen Zahlen umgeht
Das ist der Teil, bei dem viele einen Fehler machen. floor() rundet in Richtung negativer Unendlichkeit, sodass ein negativer Wert weg von null gerundet wird, nicht auf null zu.
<?php
echo floor(4.7); // 4
echo "\n";
echo floor(-4.7); // -5 (down means more negative)
echo "\n";
echo floor(-4.1); // -5
echo "\n";
echo floor(8); // 8 (already an integer)
?>Bei -4.7 sind die darunter liegenden ganzen Zahlen -5, -6, ...; die größte davon ist -5. Wenn Sie -4 möchten (Rundung in Richtung null), würden Sie stattdessen ceil() oder einen Cast wie (int) -4.7 verwenden.
floor() vs. ceil() vs. round()
Diese drei Funktionen geben alle ganze Zahlen zurück, unterscheiden sich aber in der Richtung:
| Funktion | Richtung | floor(2.5) / ceil(2.5) / round(2.5) |
|---|---|---|
floor() | Immer nach unten (in Richtung −∞) | 2.0 |
ceil() | Immer nach oben (in Richtung +∞) | 3.0 |
round() | Zur nächsten, Hälften standardmäßig nach oben | 3.0 |
<?php
echo floor(2.5); // 2
echo "\n";
echo ceil(2.5); // 3
echo "\n";
echo round(2.5); // 3
?>Wann würde ich floor() verwenden?
floor() kommt immer dann zum Einsatz, wenn man eine ganze Zahl braucht, die niemals überschießen darf:
- Paginierung — Anzahl vollständiger Seiten:
floor($totalItems / $perPage). - Zeit/Einheiten — ganze Stunden aus Minuten:
floor($minutes / 60). - Geld/Mengen — wie viele ganze Artikel in ein Budget passen:
floor($budget / $price).
<?php
$totalItems = 47;
$perPage = 10;
$fullPages = floor($totalItems / $perPage);
echo "Full pages: " . $fullPages; // Full pages: 4
?>Hinweis: Für die Integer-Division können Sie auch
intdiv()verwenden, das einen echtenintzurückgibt und klarer ist, wenn beide Operanden Integer sind. Verwenden Siefloor(), wenn floats im Spiel sind.
Fazit
floor() rundet immer in Richtung negativer Unendlichkeit ab und gibt einen float zurück. Beachten Sie, dass negative Zahlen weg von null gerundet werden, und casten Sie das Ergebnis zu (int), wenn Sie einen Integer-Typ benötigen. Für die entgegengesetzte Richtung verwenden Sie ceil(), für das Runden auf den nächsten Wert verwenden Sie round(), und für die Formatierung von Zahlen mit Tausendertrennzeichen siehe number_format().