我有一台Debian Jessie和PHP 5.6.9的机器,以及一台使用相同PHP版本的Debian Wheezy机器(但是来自dotdeb.org)。
以下代码在两台机器上给出了不同的结果:
$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
这里的问题是什么?为什么结果不一致?
答案 0 :(得分:0)
我已经找到了问题所在。我发布的代码是错误的,不应该以任何方式工作。正确的代码是:
$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
解析器。