PHP Conference Nagoya 2025

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

Параметр для получения названия валюты (трёхбуквенный код валюты 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";
?>

Результат выполнения приведённого примера:

У нас 1234567.89 в USD

Смотрите также

Добавить

Примечания пользователей 1 note

up
2
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.
To Top