Signatur
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 alsfloatü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
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)
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;
}
// 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.