with round pesos number money_format money floatval decimals php formatting currency

pesos - php round 2 decimals with zero



Obtener el símbolo de moneda en PHP (7)

Comencemos con una simple pieza de código para formatear dinero con NumberFormatter :

$formatter = new NumberFormatter(''en_US'', NumberFormatter::CURRENCY); echo $formatter->formatCurrency(123456789, ''JPY'');

Esto imprime: ¥123,456,789 .

Esto está bien si quieres formatear el dinero.

Pero lo que quiero hacer es obtener un símbolo de moneda (por ejemplo, ¥) para el código ISO 4217 en moneda dada (por ejemplo, JPY).

Mi primera conjetura fue intentar usar:

$formatter->getSymbol(NumberFormatter::CURRENCY_SYMBOL);

Pero eso da el símbolo de moneda para la configuración regional dada en el constructor (en_US), $ en mi caso.

¿Hay alguna forma de obtener el símbolo de moneda por código de moneda ISO 4217 en PHP?


Cryptic tiene una buena respuesta, pero hay una manera más simple de hacerlo:

preg_replace(''#[a-z0-9.]*#i'', '''', $formatter->formatCurrency(''0'', $currency))

Esta es una buena solución en línea simple que no requiere declarar otra función, sin embargo, tampoco maneja todos los casos adecuadamente, es decir, monedas donde las letras son parte de la salida. Pero para distinguir entre, por ejemplo, $ y £, funciona bien.


Dado que los símbolos pueden ser de varios bytes, utilicé las funciones mb _ * () para capturar correctamente todos los caracteres que no sean de puntuación y que no sean dígitos, lo que simplemente dejaría el símbolo.

function get_currency_symbol($string) { $symbol = ''''; $length = mb_strlen($string, ''utf-8''); for ($i = 0; $i < $length; $i++) { $char = mb_substr($string, $i, 1, ''utf-8''); if (!ctype_digit($char) && !ctype_punct($char)) $symbol .= $char; } return $symbol; } $format = new NumberFormatter(''en_US'', NumberFormatter::CURRENCY); $string = $format->formatCurrency(123456789, ''JPY''); echo get_currency_symbol($string);


En primer lugar, no existe una tabla internacional de símbolos de moneda global, que cualquier persona en el planeta pueda leer y comprender.

En cada región / país, los símbolos de moneda serán diferentes, por eso debe determinarlos en función de quién está leyendo, utilizando la configuración regional del navegador / usuario.

La forma correcta es la que usted adivinó, utilizando NumberFormatter :: CURRENCY_SYMBOL, pero primero debe establecer la configuración regional adecuada como en-US @ currency = JPY :

$locale=''en-US''; //browser or user locale $currency=''JPY''; $fmt = new NumberFormatter( $locale."@currency=$currency", NumberFormatter::CURRENCY ); $symbol = $fmt->getSymbol(NumberFormatter::CURRENCY_SYMBOL); header("Content-Type: text/html; charset=UTF-8;"); echo $symbol;

De esta forma, el símbolo será comprensible para el usuario.

Por ejemplo, $ symbol será:

  • Dólar canadiense (CAD): CA $ en EE. UU., CAD en Rumania, $ CA en Irán
  • Iran Rial (IRR): IRR en Estados Unidos, mientras que en Irán será


Prueba esta variante:

$formatter->getSymbol(NumberFormatter::INTL_CURRENCY_SYMBOL);


Si configura la configuración regional usando esta función setlocale("LC_ALL", "es_AR"); Puede usar localeconv()[''currency_symbol''] o localeconv()[''int_curr_symbol''] para obtener el símbolo de moneda de configuración regional y la variación internacional del símbolo de moneda.


Zend_Locale::getTranslationList(''CurrencySymbol'')

Le dará una matriz asociativa de códigos de moneda de 3 letras para su símbolo.

Puede usar así:

$curArr = Zend_Locale::getTranslationList(''CurrencySymbol''); echo $curArr[''GBP''];