从 formatCurrency 中删除货币符号
Posted
技术标签:
【中文标题】从 formatCurrency 中删除货币符号【英文标题】:Removing currency symbol from formatCurrency 【发布时间】:2015-11-26 17:16:28 【问题描述】:我正在尝试将收入总额格式化为从数据库中获取的格式,并使用 php 的 NumberFormatter 类和 formatCurrency 方法。
但是,我不想用这个打印出实际的欧元/欧元符号。我只想要简单的数字,带有逗号和小数点。
示例; 1234.56 应格式化为 1,234.56 目前的产出是 1,234.56 欧元。
我正在使用的代码:
$array['total_revenue'] = $this
->db
->query($sql)
->row_array()['SUM( booking_total )'];
$formatter = new NumberFormatter('en_GB', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency($array['total_revenue'], 'EUR') . PHP_EOL;
有人对我如何解决这个问题以删除欧元符号有任何想法吗?
【问题讨论】:
你不能把NumberFormatter::CURRENCY
改成NumberFormatter::DECIMAL
吗?
为什么不使用 number_format ?
@MuratCemYALIN 这不会更改字符串以使用语言环境货币格式。
@JonStirling 是的,效果很好。谢谢!如果您想将其发布为答案,我可以接受吗?
然后使用 money_format。我猜 ! flag 将删除货币符号
【参考方案1】:
你应该使用setSymbol()
函数:
$formatter = new NumberFormatter('en_GB', NumberFormatter::CURRENCY);
$formatter->setSymbol(NumberFormatter::CURRENCY_SYMBOL, '');
echo $formatter->formatCurrency($array['total_revenue'], 'EUR') . PHP_EOL;
【讨论】:
fyi:对于语言环境 de_DE,它仍然包含分隔符“NO-BREAK SPACE - 0xc2 0xa0” - 我不知何故无法摆脱它。【参考方案2】:我来到这里是因为出于某种原因,$formatter->setSymbol(NumberFormatter::CURRENCY_SYMBOL, '');
被$formatter->formatCurrency($array['total_revenue'], 'USD');
忽略了
为了解决这个问题,我在这里找到了解决方案。 https://www.php.net/manual/en/numberformatter.setsymbol.php#124153
这对某些人来说可能很明显,但
setSymbol(NumberFormatter::CURRENCY_SYMBOL, '')
不适用于formatCurrency
- 它只会被忽略...使用
NumberFormatter::CURRENCY
和$fmt->format(123);
获取符号指定为CURRENCY_SYMBOL
(或INTL_CURRENCY_SYMBOL
)的货币值
即
$fmt = new NumberFormatter('de_DE', NumberFormatter::CURRENCY);
$fmt->setSymbol(NumberFormatter::CURRENCY_SYMBOL, '');
$fmt->setAttribute(NumberFormatter::FRACTION_DIGITS, 2);
echo $fmt->format(56868993064.7985);
//Output: 56.868.993.064,80
【讨论】:
这应该被视为一个答案【参考方案3】:简单的正则表达式可以快速解决您的问题。试试看;
$actual = $formatter->formatCurrency($array['total_revenue'], 'EUR') . PHP_EOL;
$output = preg_replace( '/[^0-9,"."]/', '', $actual );
echo $output;
希望对你有帮助
【讨论】:
正则表达式会删除除数字、逗号或点以外的任何内容,但某些语言环境使用其他符号(例如挪威使用空格作为组分隔符) - 最好使用setSymbol
答案!以上是关于从 formatCurrency 中删除货币符号的主要内容,如果未能解决你的问题,请参考以下文章