从 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 中删除货币符号的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 XSLT 从 XML 中删除货币符号?

FormatCurrency 不是函数

PHP从次要单位格式化多种货币

在输入掩码货币中更改货币符号或将其删除

php 删除十进制删除小数价格删除magento货币符号中的十进制价格编辑价格编辑货币编辑小数

删除货币符号、1000 的分隔符并标准化十进制符号[重复]