回复 daniel at danielphenry dot com 下面的示例注释。Daniel 给出的示例在 PHP7.x 下返回 false,这是正常的行为,因为 NumberFormatter::parseCurrency() 是用于解析货币字符串的方法。它试图将给定的字符串拆分为浮点数和货币。
在 PHP7 中使用严格类型时,以下示例使其更清晰。
<?php
declare(strict_types=1);
namespace MMNewmedia;
$oParser = new \NumberFormatter('de_DE', \NumberFormatter::CURRENCY);
var_dump($oParser->parseCurrency("1.234.567,89\xc2\xa0€", $currency), $currency));
?>
此示例返回:“float(1234567.89) string(3) "EUR"
这是预期的行为。
以下示例会导致类型错误,这是绝对正确的,因为此方法用于解析字符串,而不是将浮点数格式化为货币字符串。
<?php
declare(strict_types=1);
namespace MMNewmedia;
try {
$oCurrencyParser = new \NumberFormatter('de_DE', \NumberFormatter::CURRENCY);
$currency = 'EUR';
var_dump($oCurrencyParser->parseCurrency(1.234, $currency), $currency);
} catch (\TypeError $oTypeError) {
var_dump($oTypeError->getMessage());
}
?>
此示例返回“NumberFormatter::parseCurrency() expects parameter 1 to be string, float given”。
如果要将浮点数解析为货币字符串,请使用https://php.net/manual/en/numberformatter.formatcurrency.php方法,如下一个示例所示。
<?php
declare(strict_types=1);
namespace MMNewmedia;
$oFormatter = new \NumberFormatter('de_DE', \NumberFormatter::CURRENCY);
var_dump($oFormatter->formatCurrency(1234567.89, 'EUR'));
?>
这将返回字符串(17) "1.234.567,89 €",如预期的那样。