Start · Sprachen · PHP · Referenz · numfmt_set_attribute

numfmt_set_attribute

Funktion

Setzt ein numerisches Attribut eines <code>NumberFormatter</code>-Objekts, z. B. minimale/maximale Nachkommastellen oder Rundungsmodus.

seit PHP 5.3.0 Kategorie: string

Signatur

numfmt_set_attribute(NumberFormatter $formatter, int $attribute, int|float $value): bool

Beschreibung

numfmt_set_attribute() ist die prozedurale Variante der Methode NumberFormatter::setAttribute() aus der Intl-Erweiterung. Sie ermöglicht es, das Verhalten eines NumberFormatter-Objekts über vordefinierte Attribut-Konstanten fein zu steuern.

Typische Anwendungsfälle sind das Festlegen der minimalen und maximalen Anzahl von Nachkommastellen (NumberFormatter::MIN_FRACTION_DIGITS, NumberFormatter::MAX_FRACTION_DIGITS), den Rundungsmodus (NumberFormatter::ROUNDING_MODE) oder die Gruppentrennzeichen-Einstellung. Diese Attribute beeinflussen sowohl die Formatierung als auch das Parsen von Zahlen.

Das Gegenstück zum Lesen eines Attributs ist numfmt_get_attribute(). Für Text-Attribute (wie z. B. Währungscode) muss stattdessen numfmt_set_text_attribute() verwendet werden.

  • Ganzzahlige Attribute (z. B. Dezimalstellen, Rundungsmodus) werden als int übergeben.
  • Gleitkomma-Attribute (z. B. NumberFormatter::ROUNDING_INCREMENT) werden als float übergeben.

Parameter

Name Typ Default Beschreibung
$formatter Pflicht NumberFormatter Ein NumberFormatter-Objekt, das zuvor mit numfmt_create() erzeugt wurde.
$attribute Pflicht int Eine der NumberFormatter-Attribut-Konstanten, z. B. NumberFormatter::MAX_FRACTION_DIGITS, NumberFormatter::ROUNDING_MODE oder NumberFormatter::GROUPING_USED.
$value Pflicht int|float Der zu setzende Wert. Für die meisten Attribute ein int, für NumberFormatter::ROUNDING_INCREMENT ein float.

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück. Im Fehlerfall (unbekannte Attribut-Konstante, ungültiger Wert oder ungültiger Formatter) wird false zurückgegeben. Der aufgetretene Fehler kann dann über numfmt_get_error_code() und numfmt_get_error_message() abgefragt werden.

Beispiele

Nachkommastellen eines Zahlenformatierers steuern

<?php
$fmt = numfmt_create('de_DE', NumberFormatter::DECIMAL);

// Mindestens 2, maximal 4 Nachkommastellen
numfmt_set_attribute($fmt, NumberFormatter::MIN_FRACTION_DIGITS, 2);
numfmt_set_attribute($fmt, NumberFormatter::MAX_FRACTION_DIGITS, 4);

echo numfmt_format($fmt, 1234.5) . PHP_EOL;    // 1.234,50
echo numfmt_format($fmt, 1234.5678) . PHP_EOL; // 1.234,5678
echo numfmt_format($fmt, 1234.56789) . PHP_EOL;// 1.234,5679 (gerundet)
1.234,50 1.234,5678 1.234,5679

Rundungsmodus auf HALF_UP setzen

<?php
$fmt = numfmt_create('en_US', NumberFormatter::DECIMAL);
numfmt_set_attribute($fmt, NumberFormatter::MAX_FRACTION_DIGITS, 2);
numfmt_set_attribute($fmt, NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFUP);

echo numfmt_format($fmt, 2.345) . PHP_EOL; // 2.35
echo numfmt_format($fmt, 2.344) . PHP_EOL; // 2.34

// Fehlerbehandlung
if (!numfmt_set_attribute($fmt, NumberFormatter::MAX_FRACTION_DIGITS, -1)) {
    echo 'Fehler: ' . numfmt_get_error_message($fmt) . PHP_EOL;
}
2.35 2.34

// Wichtig · Fallstricke

Wichtig: Nicht alle Attribut-Konstanten sind für jeden Formatierer-Stil gültig. Wird eine nicht unterstützte Kombination verwendet, gibt die Funktion false zurück, ohne eine PHP-Warnung auszulösen – immer die Rückgabe prüfen.

Die OOP-Alternative NumberFormatter::setAttribute() ist funktional identisch und wird in modernem Code bevorzugt.

Negative Werte für Digit-Attribute (z. B. MIN_FRACTION_DIGITS < 0) sind ungültig und führen zu einem Fehler.