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 作为那里的输入值。它可能会提出一个有趣的问题。
我在 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 作为那里的输入值。它可能会提出一个有趣的问题。