Signatur
Beschreibung
bcscale() gehört zur BCmath-Erweiterung (Binary Calculator) und steuert, wie viele Nachkommastellen bei arithmetischen BCmath-Operationen standardmäßig verwendet werden. Der gesetzte Wert gilt global für die aktuelle Anfrage und wirkt sich auf alle BCmath-Funktionen aus, die keinen eigenen $scale-Parameter erhalten.
Ab PHP 7.3 kann bcscale() auch ohne Argument aufgerufen werden, um den aktuell gesetzten Skalierungswert abzufragen, ohne ihn zu verändern. In älteren Versionen musste immer ein Wert übergeben werden.
Typischer Einsatzfall: Am Anfang einer Berechnung (z. B. für Währungsbeträge, wissenschaftliche Rechnungen oder kryptographische Operationen) einmal die gewünschte Präzision festlegen, damit alle nachfolgenden BCmath-Aufrufe konsistent arbeiten. Alternativ kann die Genauigkeit auch direkt über den optionalen $scale-Parameter jeder BCmath-Funktion kontrolliert werden.
Zu beachten ist, dass der globale Standardwert auch über die PHP-INI-Direktive bcmath.scale konfiguriert werden kann. bcscale() überschreibt diesen Wert für die Laufzeit des Skripts.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $scale | int|null | null | Anzahl der Nachkommastellen (0 oder größer), die als Standard gesetzt werden soll. Wird null oder kein Argument übergeben (ab PHP 7.3), bleibt der aktuelle Wert unverändert und wird nur zurückgegeben. |
Rückgabewert
Beispiele
Globale Genauigkeit setzen und BCmath-Operationen durchführen
<?php
// Standard-Genauigkeit auf 4 Nachkommastellen setzen
bcscale(4);
$a = '10';
$b = '3';
echo bcdiv($a, $b) . PHP_EOL; // Nutzt automatisch scale=4
echo bcadd('1.5', '2.3') . PHP_EOL; // Addiert mit 4 Nachkommastellen
Aktuellen Skalierungswert abfragen (ab PHP 7.3)
<?php
// INI-Standardwert lesen (bcmath.scale, meist 0)
$aktuellerWert = bcscale();
echo 'Aktueller Wert: ' . $aktuellerWert . PHP_EOL;
// Neuen Wert setzen und alten zurückerhalten
$alter = bcscale(8);
echo 'Alter Wert war: ' . $alter . PHP_EOL;
echo 'Neuer Wert: ' . bcscale() . PHP_EOL;
Währungsberechnung mit definierter Präzision
<?php
// Für Währungsoperationen: 2 Nachkommastellen
bcscale(2);
$preis = '19.99';
$mwst = '0.19';
$brutto = bcmul($preis, bcadd('1', $mwst));
echo 'Bruttopreis: ' . $brutto . ' EUR' . PHP_EOL;
// Wichtig · Fallstricke
Sicherheit / Genauigkeit: Der Standardwert von bcmath.scale ist 0, was bedeutet, dass ohne explizites bcscale() alle BCmath-Ergebnisse als ganze Zahlen zurückgegeben werden – Nachkommastellen werden abgeschnitten, nicht gerundet. Dies kann zu unerwarteten Ergebnissen führen.
PHP-Version: Das Aufrufen ohne Argumente zur reinen Abfrage (bcscale()) funktioniert erst ab PHP 7.3.0. In früheren Versionen ist immer ein Integer-Argument erforderlich.
Globaler Gültigkeitsbereich: Der Wert gilt für das gesamte Skript. In Bibliotheken oder Frameworks empfiehlt es sich, den alten Wert zu speichern und nach der Operation wiederherzustellen, um Seiteneffekte zu vermeiden.