Signatur
Beschreibung
bcfloor() ist Teil der BCMath-Erweiterung für beliebig genaue Arithmetik und ermittelt den größten ganzzahligen Wert, der kleiner oder gleich der übergebenen Zahl ist – analog zur PHP-Funktion floor(), jedoch ohne die Präzisionsverluste, die beim Umgang mit Gleitkommazahlen (float) auftreten können.
Die Funktion erwartet die Zahl als string, was die Verarbeitung sehr großer oder sehr kleiner Dezimalzahlen ermöglicht, die mit nativen PHP-Floats nicht korrekt dargestellt werden könnten. Das Ergebnis wird ebenfalls als string zurückgegeben und enthält keine Nachkommastellen.
Typische Einsatzgebiete sind Finanzberechnungen, Kryptowährungsanwendungen oder wissenschaftliche Berechnungen, bei denen exakte Dezimalgenauigkeit unabdingbar ist und eine Abrundung auf den ganzzahligen Teil benötigt wird.
Negative Zahlen werden korrekt behandelt: bcfloor('-1.3') liefert '-2', da –2 die nächstkleinere ganze Zahl gegenüber –1,3 ist.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | string | Die abzurundende Zahl als Zeichenkette in dezimaler Darstellung, z. B. '3.7' oder '-2.1'. Ungültige Zeichen im String führen zu einem ValueError. |
Rückgabewert
string ohne Nachkommastellen. Für negative Zahlen wird in Richtung negativer Unendlichkeit gerundet.Beispiele
Einfaches Abrunden positiver und negativer Zahlen
<?php
// Positive Dezimalzahl
echo bcfloor('4.9'); // Gibt '4' aus
echo "\n";
// Negative Dezimalzahl
echo bcfloor('-1.3'); // Gibt '-2' aus
echo "\n";
// Bereits ganzzahliger Wert
echo bcfloor('7.0'); // Gibt '7' aus
Finanzberechnung mit sehr langer Dezimalzahl
<?php
// Berechnung eines Rabatts ohne Float-Präzisionsfehler
$preis = '199.9999999999999';
$rabatt = '0.1234567890123456';
$nettoBetrag = bcsub($preis, $rabatt, 20);
echo 'Nettobetrag: ' . $nettoBetrag . "\n";
echo 'Abgerundet: ' . bcfloor($nettoBetrag) . "\n";
// Vergleich mit float-basiertem floor() – zeigt mögliche Abweichungen
$floatBetrag = (float)$preis - (float)$rabatt;
echo 'floor() float: ' . floor($floatBetrag) . "\n";
// Wichtig · Fallstricke
Voraussetzung: Die BCMath-Erweiterung muss kompiliert oder als Shared Extension geladen sein (extension=bcmath). Ab PHP 8.4.0 ist bcfloor() verfügbar.
Eingabevalidierung: Ungültige Strings (z. B. 'abc') lösen seit PHP 8.x einen ValueError aus. Vor dem Aufruf sollte die Eingabe daher validiert werden, insbesondere wenn sie aus Nutzereingaben stammt.
Rückgabeformat: Der zurückgegebene String enthält keine Nachkommastellen und kein .0-Suffix. Soll das Ergebnis für weitere BCMath-Operationen genutzt werden, ist das kein Problem; für Ausgaben kann eine explizite Formatierung sinnvoll sein.