我在使用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中的一个bug,但我真的不知道如何修复它,也不知道其他解决方法。如果有任何帮助,我将非常感激。
发布于 2013-10-10 14:45:49
肮脏的修复:
$formattedCurrency = preg_replace('/,00$/', '', $fmt->formatCurrency(15, 'EUR'));发布于 2018-01-24 17:38:30
您可以使用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 € 15https://stackoverflow.com/questions/19298267
复制相似问题