我将使用PHP NumberFormatter类来打印货币值。
例如:
那很好用,而且如预期地返回了"$123.00"、"R$123.00"、"£123.00"。但是负数会以“会计风格”打印,用括号括起来,而不是前导符号“-”。例如:
返回结果为
我可以通过以下方式覆盖前缀和后缀来删除括号:
但是我得不到货币符号,例如
在设置NEGATIVE_PREFIX属性时,是否有一些需要使用货币符号的转义代码?
编辑:如果这能给我想要的结果,我可以设置不同的区域设置。
编辑2:查看Intl library docs(实现NumberFormatter的库),以下内容看起来很有前途:
¤ (\u00A4):前缀或后缀:没有货币符号,而是替换为货币符号。如果加倍,则替换为国际货币符号。如果三倍,则替换为货币复数名称,例如"美元"或"美元"。如果在模式中存在,则使用货币小数分隔符而不是小数分隔符。
但是这个:
例如:
$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):前缀或后缀:没有货币符号,而是替换为货币符号。如果加倍,则替换为国际货币符号。如果三倍,则替换为货币复数名称,例如"美元"或"美元"。如果在模式中存在,则使用货币小数分隔符而不是小数分隔符。
但是这个:
$cFormatter->setTextAttribute(NumberFormatter::NEGATIVE_PREFIX, "-¤");
仅打印“-¤123”,所以没有乐趣。
编辑3:我认为我找到了答案,请见下文。