繁体   English   中英

在具有相同PHP版本的计算机上,NumberFormatter :: parseCurrency提供不同的结果

[英]NumberFormatter::parseCurrency gives different results on machines with same PHP version

我有一台使用Debian Jessie和PHP 5.6.9的计算机,以及一台使用相同PHP版本(但来自dotdeb.org)的Debian Wheezy的计算机。

以下代码在两台计算机上给出了不同的结果:

$value = '900,00';
$cur = 'EUR';
$formatter = new \NumberFormatter('nl_NL', \NumberFormatter::TYPE_CURRENCY);
$formatter->setPattern('#,##0.00;#,##0.00-');
$res = $formatter->parseCurrency($value, $cur);
var_dump($res);
var_dump($formatter->getErrorMessage());

Debian Weezy的输出:

float(900) string(12) "U_ZERO_ERROR"

Debian Jessie的输出:

bool(false) string(36) "Number parsing failed: U_PARSE_ERROR"

两台机器都安装了php5-intl。 两台机器都安装了libicu(在wheezy上为libicu48,在Jessie上为libicu52)。 两种机器都有可用的相同语言环境:

$ locale -a
C
C.UTF-8
en_US.utf8
POSIX

另外,我无法在3v4l.org上复制它。 在那里,我在所有PHP版本上都遇到了解析错误:http: //3v4l.org/XgsBu

这是什么问题 为什么结果不一致?

我已经解决了问题。 我发布的代码有错误,并且两种方法都不应该起作用。 正确的代码是这样的:

$value = '900,00';
$formatter = new \NumberFormatter('nl_NL', \NumberFormatter::DECIMAL);
$formatter->setPattern('#,##0.00;#,##0.00-');
$res = $formatter->parse($value, \NumberFormatter::TYPE_DOUBLE);
var_dump($res);
var_dump($formatter->getErrorMessage());

错误:

  • 第二个构造函数参数不应为TYPE_*常量之一。 这些用于parse方法。
  • 货币解析器期望使用货币符号。 由于我的值没有值,因此应该改用DECIMAL解析器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM