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
string
string
int
): float|false
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 オブジェクト指向の例
<?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
参考
- numfmt_get_error_code() - フォーマッタの直近のエラーコードを取得する
- numfmt_parse() - 数値をパースする
- numfmt_format_currency() - 通貨の値をフォーマットする
+add a note
User Contributed Notes 1 note
info at mm-newmedia dot de ¶
7 years ago
In reply to daniel at danielphenry dot com example note beneath. The given example by Daniel returns false under PHP7.x, which is a normal behavior since NumberFormatter::parseCurrency() is a method for parsing currency strings. It is trying to split up the given string in a float and a currency.
While using strict types under PHP7 the following example makes it more clearer.
<?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));
?>
This example returns: "float(1234567.89) string(3) "EUR"
This is the expected behavior.
The following example runs into a type error, which is absolutely right, since this method is vor parsing strings and not vor formatting floats into currency strings.
<?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());
}
?>
This example returns "NumberFormatter::parseCurrency() expects parameter 1 to be string, float given".
If you want to parse floats into a currency string use the http://php.net/manual/en/numberformatter.formatcurrency.php method as shown in the next example.
<?php
declare(strict_types=1);
namespace MMNewmedia;
$oFormatter = new \NumberFormatter('de_DE', \NumberFormatter::CURRENCY);
var_dump($oFormatter->formatCurrency(1234567.89, 'EUR'));
?>
This returns string(17) "1.234.567,89 €" as expected.
↑ and ↓ to navigate •
Enter to select •
Esc to close
Press Enter without
selection to search using Google