7

我在使用 php NumberFormatter 类时遇到了一些问题。我希望四舍五入的数字显示没有任何小数,而有小数的数字用 2 个小数四舍五入。IE

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

4

2 回答 2

0

肮脏的修复:

$formattedCurrency = preg_replace('/,00$/', '', $fmt->formatCurrency(15, 'EUR'));
于 2013-10-10T14:45:49.257 回答
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
于 2018-01-24T17:38:30.443 回答