回覆 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() 預期參數 1 為字串,給定浮點數」。
如果您想要將浮點數剖析為貨幣字串,請使用 https://php.dev.org.tw/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 €"。