PHP Conference Japan 2024

NumberFormatter::parseCurrency

numfmt_parse_currency

(PHP 5 >= 5.3.0,PHP 7,PHP 8,PECL intl >= 1.0.0)

NumberFormatter::parseCurrency -- numfmt_parse_currency剖析貨幣數值

描述

物件導向風格

public NumberFormatter::parseCurrency(string $string, string &$currency, int &$offset = null): float|false

程序化風格

numfmt_parse_currency(
    NumberFormatter $formatter,
    string $string,
    string &$currency,
    int &$offset = null
): float|false

使用目前的格式器,將字串剖析為浮點數和貨幣。

參數

formatter

NumberFormatter 物件。

currency

接收貨幣名稱的參數(3 個字母的 ISO 4217 貨幣代碼)。

offset

開始剖析的字串偏移量。 返回時,此值將保留剖析結束時的偏移量。

傳回值

剖析的數值,或在發生錯誤時傳回 false

範例

範例 1 numfmt_parse_currency() 範例

<?php
$fmt
= numfmt_create( 'de_DE', NumberFormatter::CURRENCY );
$num = "1.234.567,89\xc2\xa0$";
echo
"We have ".numfmt_parse_currency($fmt, $num, $curr)." in $curr\n";
?>

範例 2 OO 範例

<?php
$fmt
= new NumberFormatter( 'de_DE', NumberFormatter::CURRENCY );
$num = "1.234.567,89\xc2\xa0$";
echo
"We have ".$fmt->parseCurrency($num, $curr)." in $curr\n";
?>

上面的範例會輸出

We have 1234567.89 in USD

參見

新增註解

使用者提供的註解 1 則註解

info at mm-newmedia dot de
7 年前
回覆 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 €"。
To Top