Signatur
Beschreibung
bcround() ist Teil der BCMath-Erweiterung und ermöglicht das Runden von Zahlen mit beliebiger Präzision, die als Strings übergeben werden. Im Gegensatz zu round() verliert bcround() keine Genauigkeit durch Gleitkomma-Arithmetik, was es ideal für finanzielle Berechnungen, Buchhaltungssoftware oder wissenschaftliche Anwendungen macht, bei denen exakte Dezimalzahlen entscheidend sind.
Der Parameter precision gibt an, auf wie viele Nachkommastellen gerundet wird. Ein positiver Wert rundet auf Dezimalstellen, der Wert 0 rundet auf die nächste ganze Zahl. Negative Werte runden auf Zehnerstellen, Hunderterstellen usw.
Über den mode-Parameter (ein RoundingMode-Enum, eingeführt in PHP 8.4) kann das Rundungsverhalten präzise gesteuert werden – z. B. kaufmännisches Runden (HalfAwayFromZero), Banker's Rounding (HalfEven) oder immer in Richtung positiv/negativ Unendlich.
Die Funktion gibt das Ergebnis stets als String zurück, was die nahtlose Weiterverarbeitung mit anderen BCMath-Funktionen wie bcadd(), bcmul() usw. erlaubt.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num Pflicht | string | Die zu rundende Zahl als Dezimalstring, z. B. '3.14159' oder '-2.5'. Führende und nachfolgende Leerzeichen werden ignoriert. |
|
| $precision | int | 0 | Anzahl der Dezimalstellen, auf die gerundet wird. Positive Werte runden auf Nachkommastellen, 0 auf ganze Zahlen, negative Werte auf Zehner, Hunderter usw. |
| $mode | RoundingMode | RoundingMode::HalfAwayFromZero | Bestimmt das Rundungsverhalten bei einem Wert von genau der Hälfte. Mögliche Werte sind RoundingMode::HalfAwayFromZero (Standard, kaufmännisch), RoundingMode::HalfTowardsZero, RoundingMode::HalfEven (Banker's Rounding), RoundingMode::HalfOdd, RoundingMode::TowardsZero, RoundingMode::AwayFromZero, RoundingMode::NegativeInfinity und RoundingMode::PositiveInfinity. |
Rückgabewert
Beispiele
Einfaches kaufmännisches Runden
<?php
// Standardmodus: HalfAwayFromZero (kaufmännisches Runden)
echo bcround('2.5', 0); // 3
echo "\n";
echo bcround('2.45', 1); // 2.5
echo "\n";
echo bcround('-2.5', 0); // -3
echo "\n";
echo bcround('123456.789', 2); // 123456.79
Banker's Rounding (HalfEven) für Finanzbuchhaltung
<?php
// HalfEven rundet zur nächsten geraden Zahl – reduziert statistische Verzerrung
use RoundingMode;
$werte = ['0.5', '1.5', '2.5', '3.5', '4.5'];
foreach ($werte as $wert) {
$ergebnis = bcround($wert, 0, RoundingMode::HalfEven);
echo "bcround('$wert', 0, HalfEven) = $ergebnis\n";
}
Negative Präzision – Runden auf Zehnerstellen
<?php
// Negative precision: Runden auf die nächste Zehnerstelle
echo bcround('1234.567', -2); // 1200
echo "\n";
echo bcround('1250.00', -2); // 1300
echo "\n";
echo bcround('9876.543', -3); // 10000
// Wichtig · Fallstricke
Voraussetzung: bcround() ist erst ab PHP 8.4.0 verfügbar. Für ältere PHP-Versionen muss das Runden manuell über eine Kombination aus bcadd(), bcmul() und bccomp() oder über round() (mit Genauigkeitsverlust) implementiert werden.
BCMath-Erweiterung: Die Funktion setzt die BCMath-Erweiterung voraus (ext-bcmath). Diese ist in den meisten PHP-Standardinstallationen aktiviert, kann aber in minimalen Builds fehlen.
Gleitkomma-Vergleich: Verwende nicht round() bei finanzkritischen Berechnungen – Gleitkommazahlen können intern ungenaue Werte wie 2.4999999999 statt 2.5 darstellen, was zu falschen Rundungsergebnissen führt. bcround() arbeitet rein dezimalbasiert und ist daher exakt.