我正在使用 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 文档(这是用于实现 NumberFormatter 的库),以下内容看起来很有希望:
¤ (\u00A4) : 前缀或后缀 : 无货币符号,由货币符号代替。如果加倍,则替换为国际货币符号。如果是三倍,则替换为货币复数名称,例如美国的“美元”或“美元”。如果存在于模式中,则使用货币小数分隔符而不是小数分隔符。
但是这个:
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");
只打印“-¤123”,所以没有乐趣。
编辑3:我想我找到了答案,见下文。