Start · Sprachen · PHP · Referenz · bcscale

bcscale

Funktion

Setzt oder liest die Standard-Dezimalstellen-Genauigkeit für alle BCmath-Funktionen.

seit PHP 4.0.0 Kategorie: math

Signatur

bcscale(int $scale = null): int

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

Typ
int
Beschreibung
Gibt den zuvor gesetzten (alten) Skalierungswert zurück, wenn ein neuer Wert übergeben wurde. Wird kein Argument übergeben (ab PHP 7.3), wird der aktuell aktive Skalierungswert zurückgegeben.

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
3.3333 3.8000

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;
Aktueller Wert: 0 Alter Wert war: 0 Neuer Wert: 8

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;
Bruttopreis: 23.78 EUR

// 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.