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