6

我正在尝试将收入总额格式化为从数据库中获取的格式,并使用 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;

有人对我如何解决这个问题以删除欧元符号有任何想法吗?

4

3 回答 3

13

你应该使用setSymbol()功能:

$formatter = new NumberFormatter('en_GB',  NumberFormatter::CURRENCY);
$formatter->setSymbol(NumberFormatter::CURRENCY_SYMBOL, '');
echo $formatter->formatCurrency($array['total_revenue'], 'EUR') . PHP_EOL;
于 2019-01-28T22:24:02.123 回答
6

我来这里是因为出于某种原因,$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::CURRENCYand$fmt->format(123);获得一个货币值,其符号指定为CURRENCY_SYMBOL(or INTL_CURRENCY_SYMBOL)

IE

    $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 
于 2020-07-27T04:47:25.673 回答
2

一个简单的正则表达式可以快速解决您的问题。尝试;

$actual = $formatter->formatCurrency($array['total_revenue'], 'EUR') . PHP_EOL;
$output = preg_replace( '/[^0-9,"."]/', '', $actual );
echo $output;

希望这可以帮助

于 2015-11-26T19:22:18.833 回答