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_currencyProcesa un número monetario

Descripción

Estilo orientado a objetos

public NumberFormatter::parseCurrency(string $value, string &$currency, int &$position = ?): float

Estilo por procedimientos

numfmt_parse_currency(
    NumberFormatter $fmt,
    string $value,
    string &$currency,
    int &$position = ?
): float

Convierte una cadena en un valor de tipo double y en un valor monetario usando el formateador actual.

Parámetros

fmt

Un objeto de la clase NumberFormatter.

currency

Parámetro que recibe el nombre de la moneda (código de moneda ISO 4217 de 3 letras).

position

Índice de la cadena en la que comenzar el proceso. Cuando el método devuelve, este valor contendrá el índice en el que finalizón el proceso.

Valores devueltos

El valor numérico procesado o false en caso de error.

Ejemplos

Ejemplo #1 Ejemplo de numfmt_parse_currency()

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

Ejemplo #2 OO example

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

El resultado del ejemplo sería:

We have 1234567.89 in USD

Ver también

add a note

User Contributed Notes 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