加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

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

发布时间:2020-12-13 16:36:22 所属栏目:PHP教程 来源:网络整理
导读:我正在使用 PHP NumberFormatter类来打印货币值. 例如: $cFormatter = new NumberFormatter('en_US',NumberFormatter::CURRENCY); $cFormatter-formatCurrency(123,'USD'); $cFormatter-formatCurrency(123,'BRL'); $cFormatter-formatCurrency(123,'GBP');
我正在使用 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读