You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何结合PHP NumberFormatter的PADDING_POSITION与CURRENCY实现紧凑货币格式化?

如何在PHP中实现带货币的紧凑数字格式化

目标效果(JavaScript实现)

我想要实现和JavaScript中以下代码相同的格式化效果:

Intl.NumberFormat('en-CA', {style: 'currency', currency: 'CAD', notation: 'compact', maximumSignificantDigits: 5 }).format(12345000000);
// 输出: $12.345B
Intl.NumberFormat('fr-CA', {style: 'currency', currency: 'CAD', notation: 'compact', maximumSignificantDigits: 5 }).format(12345000000);
// 输出: "12,345 G$"

已实现的单独功能

紧凑数字格式

我可以通过以下方式实现紧凑格式,但不带货币符号:

$formatter = new NumberFormatter('en_CA', NumberFormatter::PADDING_POSITION);
$formatter->setAttribute(NumberFormatter::SIGNIFICANT_DIGITS_USED, 5);
echo $formatter->format(12345000000);

// 输出: 12.345B

$formatter = new NumberFormatter('fr_CA', NumberFormatter::PADDING_POSITION);
$formatter->setAttribute(NumberFormatter::SIGNIFICANT_DIGITS_USED, 5);
echo $formatter->format(12345000000);

// 输出: 12,345 G

货币格式化

也可以实现完整的货币格式化,但没有紧凑显示:

$formatter = new NumberFormatter('en_CA', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency(12345000000, 'CAD');

// 输出: $12,345,000,000.00

$formatter = new NumberFormatter('fr_CA', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency(12345000000, 'CAD');

// 输出: 12 345 000 000,00 $

结合尝试失败的情况

当我尝试将两者结合时,货币符号无法显示:

$formatter = new NumberFormatter('en_CA', NumberFormatter::PADDING_POSITION);
$formatter->setAttribute(NumberFormatter::SIGNIFICANT_DIGITS_USED, 5);
echo $formatter->formatCurrency(12345000000, 'CAD');

// 输出: 12.345B

$formatter = new NumberFormatter('fr_CA', NumberFormatter::PADDING_POSITION);
$formatter->setAttribute(NumberFormatter::SIGNIFICANT_DIGITS_USED, 5);
echo $formatter->formatCurrency(12345000000, 'CAD');

// 输出: 12,345 G

问题

PHP官方文档中NumberFormatter的说明十分简略,想请教这个需求是无法通过内置的国际化方法实现,还是有其他技巧可以达成?我知道可以自定义解决方案,但更希望像JavaScript那样依赖内置方法实现。

内容的提问来源于stack exchange,提问作者dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 07:16:14