NumberFormatter :: formatCurrency()在不同平台上输出

时间:2017-02-05 23:56:43

标签: php icu

请使用以下代码:

$formatter = new NumberFormatter('fr_FR', NumberFormatter::CURRENCY);
echo $formatter->formatCurrency('-1.23', 'EUR');

在Fedora 25上,输出为-1,23 €,这是我期待的输出。

在CentOS 7上,输出为(1,23 €);对法国观众而言并不十分明确。

这些差异来自何处?我怀疑它们来自系统上安装的libicu版本,但我需要对此进行确认。另外,我不确定PHP是使用系统上安装的ICU版本,还是编译时捆绑的版本。

CentOS 7有libicu-50.1.2-15,Fedora 25有libicu-57.1-4,但两个系统上的PHP版本相同,所有包都来自同一个存储库(remi),所以如果ICU与PHP捆绑在一起,我希望它们的版本完全相同。

2 个答案:

答案 0 :(得分:1)

PHP in" remi"存储库(和AFAIK所有第三方存储库)使用系统libicu,因为PHP中没有捆绑的libicu。

(使用libicu 50的EL-6的remi存储库中的软件包中的唯一例外,从EL-7而不是默认的4.2反向移植)

答案 1 :(得分:1)

可能的解决方法,设置输出模式:

dcos_agent_node-7

在Fedora 25(icu 58)和RHEL-7(icu 50)上测试:

来自ICU Documentation - Decimal Format - Detailed description

  

如果没有明确的负子模式,则负子模式   是在正子模式前面加上的局部减号。