回复 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'));
?>
这将返回 string(17) "1.234.567,89 €",如预期所示。