Start · Sprachen · PHP · Referenz · bcadd

bcadd

Funktion

Addiert zwei Zahlen beliebiger Genauigkeit und gibt das Ergebnis als Zeichenkette zurück.

seit PHP 4.0.0 Kategorie: math

Signatur

bcadd(string $num1, string $num2, ?int $scale = null): string

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

Typ
string
Beschreibung
Die Summe von 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
111111111011111111100

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';
Gesamt: 24.00 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
3.5802

Addition negativer Zahlen

<?php
$ergebnis = bcadd('-500.75', '200.25', 2);
echo $ergebnis;
-300.50

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