从 formatCurrency 中删除货币符号

Eog*_*han 4 php numberformatter

我正在尝试格式化从数据库中获取的收入总额,并使用 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;
Run Code Online (Sandbox Code Playgroud)

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

ste*_*gwa 13

我来到这里是因为出于某种原因$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)的货币值

IE

function currencyFormatter(float $currency, string $locale, int $fractionDigits): string
{
    $fmt = new NumberFormatter($locale, NumberFormatter::CURRENCY);
    $fmt->setSymbol(NumberFormatter::CURRENCY_SYMBOL, '');
    $fmt->setAttribute(NumberFormatter::FRACTION_DIGITS, $fractionDigits);

    return preg_replace(
        '/[[:^ascii:]]/',
        '',
        $fmt->format($currency)
    );
}

echo currencyFormatter(56868993064.7985, 'de_DE', 2);
//Output: 56.868.993.064,80
Run Code Online (Sandbox Code Playgroud)


Mar*_*iba 12

你应该使用setSymbol()功能:

$formatter = new NumberFormatter('en_GB',  NumberFormatter::CURRENCY);
$formatter->setSymbol(NumberFormatter::CURRENCY_SYMBOL, '');
echo $formatter->formatCurrency($array['total_revenue'], 'EUR') . PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

  • 仅供参考:对于语言环境 de_DE,它仍然包含分隔符“NO-BREAK SPACE - 0xc2 0xa0” - 而且我不知何故无法摆脱它。 (2认同)

bla*_*d Ψ 2

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

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

希望这可以帮助

  • 正则表达式删除除数字、逗号或点之外的任何内容,但某些语言环境使用其他符号(例如挪威使用空格作为组分隔符) - 最好使用“setSymbol”答案! (4认同)