Signatur
Beschreibung
bcadd() gehört zur BCMath-Erweiterung (Binary Calculator) und ermöglicht die präzise Addition von Zahlen, die in ihrer Größe oder Nachkommastellen über die Grenzen nativer PHP-Gleitkommatypen hinausgehen. Die Zahlen werden als Zeichenketten übergeben, sodass weder Überläufe noch Rundungsfehler durch Floating-Point-Arithmetik auftreten.
Der optionale Parameter scale bestimmt die Anzahl der Nachkommastellen im Ergebnis. Wird er nicht übergeben, gilt der global mit bcscale() gesetzte Wert oder standardmäßig 0. Überflüssige Nachkommastellen werden abgeschnitten (nicht gerundet).
Typische Einsatzgebiete sind Finanzberechnungen (Cent-genaue Beträge), kryptografische Algorithmen sowie jede Situation, in der Dezimalzahlen mit mehr als 15 signifikanten Stellen korrekt verarbeitet werden müssen — etwas, das mit float nicht zuverlässig möglich ist.
Beide Eingabe-Strings dürfen führende Nullen und ein optionales Minuszeichen enthalten. Ungültige Zeichen werden als 0 interpretiert; seit PHP 8.0 wird bei ungültigen Eingaben eine ValueError-Ausnahme geworfen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $num1 Pflicht | string | Der erste Summand als Dezimal-Zeichenkette, z. B. '12345.678' oder '-99'. |
|
| $num2 Pflicht | string | Der zweite Summand als Dezimal-Zeichenkette. | |
| $scale | int|null | null | Anzahl der Nachkommastellen im Ergebnis. Ist null, wird der durch bcscale() gesetzte globale Wert verwendet (Standard: 0). |
Rückgabewert
num1 und num2 als Dezimal-Zeichenkette mit der angegebenen Anzahl an Nachkommastellen. Das Ergebnis wird nicht gerundet, sondern abgeschnitten.Beispiele
Einfache Addition ganzer Zahlen
<?php
// Ohne scale: kein Nachkommaanteil
$ergebnis = bcadd('12345678901234567890', '98765432109876543210');
echo $ergebnis; // Präzise Ganzzahl-Addition, die float-Arithmetik nicht leisten könnte
Addition mit Nachkommastellen (Finanzbetrag)
<?php
// Zwei Euro-Beträge exakt addieren
$preis1 = '19.99';
$preis2 = '4.01';
$summe = bcadd($preis1, $preis2, 2);
echo 'Gesamt: ' . $summe . ' EUR';
Globale Genauigkeit mit bcscale
<?php
// Globale Skalierung setzen
bcscale(4);
$a = bcadd('1.23456', '2.34567'); // scale übernimmt bcscale-Wert (4)
echo $a; // Abschneiden nach 4 Stellen, kein Runden
Addition negativer Zahlen
<?php
$ergebnis = bcadd('-500.75', '200.25', 2);
echo $ergebnis;
// Wichtig · Fallstricke
Abschneiden statt Runden: bcadd() schneidet Nachkommastellen ab. Wer kaufmännisch runden möchte, muss dies manuell implementieren oder eine Hilfsfunktion verwenden.
Ungültige Eingaben: Seit PHP 8.0 löst ein nicht-numerischer String eine ValueError-Ausnahme aus. In früheren Versionen wurde der ungültige Teil stillschweigend als 0 behandelt — ein häufige Fehlerquelle.
BCMath-Erweiterung: Die Erweiterung ist nicht immer standardmäßig aktiviert. Beim Kompilieren von PHP ist die Option --enable-bcmath erforderlich. Viele Distributions-Pakete liefern sie aber bereits mit.