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)
一个简单的正则表达式可以快速解决您的问题。尝试;
$actual = $formatter->formatCurrency($array['total_revenue'], 'EUR') . PHP_EOL;
$output = preg_replace( '/[^0-9,"."]/', '', $actual );
echo $output;
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
5919 次 |
| 最近记录: |