微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

原文地址:https://www.jb51.cc/php/132526.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐