我正在使用
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