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
"我们有 ".numfmt_parse_currency($fmt, $num, $curr)." 在 $curr\n";
?>

范例 #2 OO 范例

<?php
$fmt
= new NumberFormatter( 'de_DE', NumberFormatter::CURRENCY );
$num = "1.234.567,89\xc2\xa0$";
echo
"我们有 ".$fmt->parseCurrency($num, $curr)." 在 $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() 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 €",如预期所示。
To Top