首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用numberFormatter格式化货币

使用numberFormatter格式化货币
EN

Stack Overflow用户
提问于 2013-10-10 14:15:53
回答 2查看 3.2K关注 0票数 7

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

代码语言:javascript
复制
$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时,格式化程序的行为就像预期的那样,但是我无法使用它,因为我只有语言在我的地区可用。

代码语言:javascript
复制
$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,但我真的不知道如何修复它,也不知道其他解决方法。如果有任何帮助,我将非常感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-10 14:45:49

肮脏的修复:

代码语言:javascript
复制
$formattedCurrency = preg_replace('/,00$/', '', $fmt->formatCurrency(15, 'EUR'));
票数 0
EN

Stack Overflow用户

发布于 2018-01-24 17:38:30

您可以使用MAX_SIGNIFICANT_DIGITS属性:

代码语言:javascript
复制
$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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19298267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档