PHP NumberFormatter.format() 显示奇怪的输出

PHP NumberFormatter.format() shows strange output

我在 PHP 函数中有以下代码:

$fmt = NumberFormatter::create('de_DE', NumberFormatter::FRACTION_DIGITS);
echo $fmt->format(15);

并且输出是两个奇怪的字符:௰௫ 我发现它在泰米尔数字中是 15。如果我将第二行中的数字更改为小数,我。 e.

$fmt = NumberFormatter::create('de_DE', NumberFormatter::FRACTION_DIGITS);
echo $fmt->format(15.5);

然后,我得到了德语的预期结果 15,50。 这是所有 运行 在带有德语键盘的英语 Ubuntu VM 上。我根本不知道泰米尔语会在哪里以及为什么会发挥作用,以及为什么它只影响整数。

显然,我做错了什么,但我不知道在哪里。有什么想法或建议去哪里看吗?

您做错的是您使用的常量并非用于创建 NumberFormatter 对象。如果你看一下构造函数签名:

public static NumberFormatter::create ( string $locale , int $style , string $pattern = ? ) : NumberFormatter

您会看到第二个参数是要应用的样式。 manual 将样式定义为以下常量之一:

These styles are used by the numfmt_create() to define the type of the formatter.

NumberFormatter::PATTERN_DECIMAL (int)

Decimal format defined by pattern

NumberFormatter::DECIMAL (int)

Decimal format

NumberFormatter::CURRENCY (int)

Currency format

NumberFormatter::PERCENT (int)

Percent format

NumberFormatter::SCIENTIFIC (int)

Scientific format

NumberFormatter::SPELLOUT (int)

Spellout rule-based format

NumberFormatter::ORDINAL (int)

Ordinal rule-based format

NumberFormatter::DURATION (int)

Duration rule-based format

NumberFormatter::PATTERN_RULEBASED (int)

Rule-based format defined by pattern

NumberFormatter::CURRENCY_ACCOUNTING (int)

Currency format for accounting, e.g., (.00) for negative currency amount instead of -.00. Available as of PHP 7.4.1 and ICU 53.

NumberFormatter::DEFAULT_STYLE (int)

Default format for the locale

NumberFormatter::IGNORE (int)

Alias for PATTERN_DECIMAL

如您所见,NumberFormatter::FRACTION_DIGITS 不是其中之一。稍后在标有以下句子的部分中提到了那个:

Number format attribute used by numfmt_get_attribute() and numfmt_set_attribute().

所以您真正需要做的是 select 样式常量之一并改用它。

不过,它唤起泰米尔数字的原因超出了我的理解范围。如果你看一下 dumps of the constants,这个常量的值为 8,样式常量的 none 对应于该数字。我不知道 PHP 如何处理 8 作为那里的输入值。它可能会提出一个有趣的问题。