使用numberFormatter格式化货币

时间:2013-10-10 14:15:54

标签: php number-formatting

我使用php NumberFormatter类遇到了一些问题。我想要显示没有任何小数的圆形数字,并且具有小数的数字要舍入为2位小数。即。

$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中的一个错误,但我真的不知道如何解决它或找出其他一些解决方法。我会非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

肮脏的修复:

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

答案 1 :(得分: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