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

Posted

技术标签:

【中文标题】PHP NumberFormatter.format() 显示奇怪的输出【英文标题】:PHP NumberFormatter.format() shows strange output 【发布时间】:2021-02-19 15:35:25 【问题描述】:

我在 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 上运行。我完全不知道泰米尔语会在哪里以及为什么会发挥作用,以及为什么它只影响整数。

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

【问题讨论】:

【参考方案1】:

您做错的是您使用的常量并非用于创建 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 作为那里的输入值。它可能会提出一个有趣的问题。

【讨论】:

使用 NumberFormatter::create('de_DE', NumberFormatter::PATTERN_DECIMAL) 代替 FRACTION_DIGITS 效果很好!

以上是关于PHP NumberFormatter.format() 显示奇怪的输出的主要内容,如果未能解决你的问题,请参考以下文章

php send.php php邮件模板#php

IntelliJ IDEA 11编辑php是,支持php文件名为.php5和.php4,如何设置能让其也支持.php呢?

如何从php5升级到php7

请问php中如何调用php文件中的内容?

php [php:PHPMailer示例] php库“PHPMailer”示例。 #PHP

php基础