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, 字符串 &$currency, 整数 &$offset = null): 浮点数|false

过程式风格

numfmt_parse_currency(
    NumberFormatter $formatter,
    字符串 $string,
    字符串 &$currency,
    整数 &$offset = null
): 浮点数|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 面向对象示例

<?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 条笔记

2
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'));
?>

这将返回字符串(17) "1.234.567,89 €",如预期的那样。
To Top