php – 如何让NumberFormatter打印带负号的负货币值?

前端之家收集整理的这篇文章主要介绍了php – 如何让NumberFormatter打印带负号的负货币值?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用 PHP NumberFormatter类来打印货币值.

例如:

$cFormatter = new NumberFormatter('en_US',NumberFormatter::CURRENCY);
  $cFormatter->formatCurrency(123,'USD');
  $cFormatter->formatCurrency(123,'BRL');
  $cFormatter->formatCurrency(123,'GBP');

工作正常,并按预期分别返回“$123.00”,“R $123.00”,“£123.00”.

但负数字印在“会计风格”上,用括号括起来,而不是前导减去“ – ”.

例如:

$cFormatter->formatCurrency(-456,'USD');

返回“($456.00)”,而我想要“ – $456.00”.当然有一种简单的方法可以做到这一点?

我可以通过覆盖前缀和后缀删除括号,如下所示:

$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX,"-");
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_SUFFIX,"");

但后来我没有货币符号,例如“-456.00”.

在设置NEGATIVE_PREFIX属性时,是否需要使用货币符号的转义码?

编辑:我很高兴设置一个不同的区域设置,如果这给了我正在寻找的结果.

编辑2:查看Intl library docs(用于实现NumberFormatter的库),以下内容看起来很有希望:

¤ (\u00A4) : Prefix or suffix : No Currency sign,replaced by currency symbol. If doubled,replaced by international currency symbol. If tripled,replaced by currency plural names,for example,“US dollar” or “US dollars” for America. If present in a pattern,the monetary decimal separator is used instead of the decimal separator.

但是这个:

$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX,"-¤");

只需打印“-¤123”,就没有喜悦.

编辑3:我想我找到了答案,见下文.

我发现将en_US语言环境行为弯曲到我正在寻找的东西–7000 / setPattern()函数稍微不那么粗鲁.
$cFormatter = new NumberFormatter('en_US',NumberFormatter::CURRENCY);
$sPattern = $cFormatter->getPattern(); // returns "¤#,##0.00;(¤#,##0.00)";

$sMyPattern = "¤#,##0.00;-¤#,##0.00";
$cFormatter->setPattern($sMyPattern);
$cFormatter->formatCurrency(-456,'USD');  // returns -$456.00

猜你在找的PHP相关文章