2013-10-10 36 views
7

我遇到了一些使用php NumberFormatter類的問題。我希望四捨五入的數字在沒有任何小數的情況下顯示,並且小數點後的數字以2位小數進行四捨五入。即使用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 

正如你所看到的最後一個轉儲輸出15,00但我在這裏期待15。 每當我使用「完整」語言環境nl_NL而不是nl格式化程序的行爲與預期的一樣,但我無法使用它,因爲我的語言環境中只有可用的語言。

$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 

這似乎是一個NumberFormatter中的錯誤,但我真的不知道如何解決它或找出其他解決方法。我會很感激任何幫助。

+0

肯定看起來像一個錯誤。如果確實如此,修復不是使用NumberFormatter,而是創建自己的。爲了快速解決問題,您可以在字符串末尾查詢00格式化的貨幣,並且只要將它剝離即可。 –

+0

感謝您的評論。因爲我們有一個擁有多種語言的網站,所以自己寫作並不是一個真正的選擇。如果沒有其他人有更好的解決方案,我可以實施這樣的修補程序。 –

回答

0

骯髒的修復:

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

謝謝。它應該是'/ [,\。] 00 $ /'順便說一句,因爲在英語中他們正在使用點。 15.00 –

+0

正確,如果錯誤也出現在這些格式中。 –

0

你可以使用MAX_SIGNIFICANT_DIGITS屬性:

$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