您做错的是您使用的常量并非用于创建 NumberFormatter 对象。如果你看一下构造函数签名:
public static NumberFormatter::create ( string $locale , int $style , string $pattern = ? ) : NumberFormatter
您会看到第二个参数是要应用的样式。 manual 将样式定义为以下常量之一:
numfmt_create() 使用这些样式来定义格式化程序的类型。
NumberFormatter::PATTERN_DECIMAL (int)
由模式定义的十进制格式
NumberFormatter::DECIMAL (int)
十进制格式
NumberFormatter::CURRENCY (int)
货币格式
NumberFormatter::PERCENT (int)
百分比格式
NumberFormatter::SCIENTIFIC (int)
科学格式
NumberFormatter::SPELLOUT (int)
基于规则的拼写格式
NumberFormatter::ORDINAL (int)
基于顺序规则的格式
NumberFormatter::DURATION (int)
持续时间基于规则的格式
NumberFormatter::PATTERN_RULEBASED (int)
由模式定义的基于规则的格式
NumberFormatter::CURRENCY_ACCOUNTING (int)
用于记帐的货币格式,例如,($3.00) 表示负货币金额,而不是 -$3.00。自 PHP 7.4.1 和 ICU 53 起可用。
NumberFormatter::DEFAULT_STYLE (int)
语言环境的默认格式
NumberFormatter::IGNORE (int)
PATTERN_DECIMAL 的别名
如您所见,NumberFormatter::FRACTION_DIGITS 不是其中之一。稍后在以下句子标记的部分中提到了这一点:
numfmt_get_attribute() 和 numfmt_set_attribute() 使用的数字格式属性。
所以你真正需要做的是选择一个样式常量并使用它。
不过,它唤起了泰米尔语数字会发生什么,我无法理解。如果你看一下dumps of the constants,这个常量的值是 8,并且没有一个样式常量对应于那个数字。我不知道 PHP 如何处理 8 作为那里的输入值。它可能会提出一个有趣的问题。