2013-10-10 5 views
7

ich lief in einige Probleme, die die PHP-NumberFormatter Klasse. Ich mag abgerundete Ziffern ohne Dezimalstellen angezeigt werden, und Ziffern, die Dezimalstellen gerundet werden mit 2 Dezimalstellen hat. das heißtFormatierung Währung numberFormatter

$fmt = new NumberFormatter('nl', NumberFormatter::CURRENCY); 
$fmt->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0); 
$fmt->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 2); 

var_dump($fmt->formatCurrency(15.15, 'EUR')); //Outputs € 15,15 
var_dump($fmt->formatCurrency(15, 'EUR')); //Outputs € 15,00 

Wie Sie das letzte Dump 15,00 sehen ausgibt, aber ich erwarte 15 hier. Jedes Mal, wenn ich die „vollen“ locale nl_NL statt nl die Formatierer wie erwartet verhalten, aber ich bin nicht in der Lage, das verwenden, weil ich nur die Sprache in meinem locale zur Verfügung.

$fmt = new NumberFormatter('nl_NL', NumberFormatter::CURRENCY); 
$fmt->setAttribute(\NumberFormatter::MIN_FRACTION_DIGITS, 0); 
$fmt->setAttribute(\NumberFormatter::MAX_FRACTION_DIGITS, 2); 

var_dump($fmt->formatCurrency(15.15, 'EUR')); //Outputs € 15,15 
var_dump($fmt->formatCurrency(15, 'EUR')); //Output € 15 

Dies scheint ein Fehler in dem NumberFormatter aber ich habe wirklich keine Ahnung, wie es zu beheben oder eine andere Abhilfe herauszufinden. Ich wäre sehr dankbar für jede Hilfe.

+0

Auf jeden Fall wie ein Fehler aussieht. Wenn das tatsächlich der Fall ist, besteht die Fehlerbehebung nicht darin, den NumberFormatter zu verwenden, sondern Ihren eigenen zu erstellen. Für eine schnelle Lösung, könnten Sie die formatierte Währung, 00 am Ende des Strings abfragen, und es ist einfach weg abzustreifen, wenn wahr. –

+0

Danke für Ihren Kommentar. Meine eigene Sprache zu schreiben ist nicht wirklich eine Option, da wir eine Website mit vielen Sprachen haben. Ich könnte einen dreckigen Fix wie diesen implementieren, wenn niemand sonst eine bessere Lösung hat. –

Antwort

0

Schmutzige fix:

$formattedCurrency = preg_replace('/,00$/', '', $fmt->formatCurrency(15, 'EUR')); 
+1

Danke. Es sollte '/ sein [, \.] $ 00 /' btw weil in Englisch sind sie mit Punkten. 15.00 –

+0

Richtig, wenn der Fehler erscheint auch in diesen Formaten. –

0

können Sie das MAX_SIGNIFICANT_DIGITS Attribut verwenden:

$fmt = new NumberFormatter('nl', NumberFormatter::CURRENCY); 
$fmt->setAttribute(\NumberFormatter::MAX_SIGNIFICANT_DIGITS, 7); 

var_dump($fmt->formatCurrency(15.15, 'EUR')); // Outputs € 15,15 
var_dump($fmt->formatCurrency(15, 'EUR')); // Outputs € 15