2010-10-25 66 views
32

Tengo algunos valores de precio para mostrar en mi página.Imprimir Formato de número de moneda en PHP

estoy escribiendo una función que toma el precio del flotador y devuelve la moneda val formateado con código de moneda también ..

Por ejemplo, fnPrice(1001.01) debe imprimir $ 1,000.01

Respuesta

95

La respuesta más fácil es number_format().

echo "$ ".number_format($value, 2); 

Si desea que su aplicación sea capaz de trabajar con múltiples monedas y el formato de la configuración regional conscientes (1.000,00 para algunos de nosotros, los europeos, por ejemplo), se convierte en un poco más complejo.

No es money_format() pero no funciona en Windows y se basa en setlocale(), lo cual es basura en mi opinión, porque requiere la instalación de paquetes de configuración regional (denominados arbitrariamente) en el servidor.

Si desea internacionalizar seriamente su aplicación, considere utilizar una biblioteca de internacionalización completa como Zend Framework Zend_Locale y Zend_Currency.

+5

+1 no sabía acerca de esos problemas con Windows. – Sarfraz

+3

Buena respuesta, +1 para Zend_Locale y Zend_Currency – RobertPitt

+0

Excelente respuesta – MikeMurko

7

sprintf() es la función de PHP para todo tipo de formato de cadenas http://php.net/manual/en/function.sprintf.php

puedo utilizar esta función:

function formatDollars($dollars){ 
    return '$ '.sprintf('%0.2f', $dollars); 
} 
+3

esto no agregará comas (separadores de miles) – stillstanding

+1

Perdone la gravedig. Puede envolver '$ dollars' (en' sprintf() ') en' number_format() '. Eso agregará las comas – Magictallguy

44

con la extensión Intl en PHP 5.3+, puede utilizar la clase NumberFormatter :

$amount = '12345.67'; 

$formatter = new NumberFormatter('en_GB', NumberFormatter::CURRENCY); 
echo 'UK: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL; 

$formatter = new NumberFormatter('de_DE', NumberFormatter::CURRENCY); 
echo 'DE: ', $formatter->formatCurrency($amount, 'EUR'), PHP_EOL; 

que imprime:

UK: €12,345.67 
DE: 12.345,67 € 
+2

+1 para el formateador de números nativo – KoolKabin

+2

. Es muy importante tener una solución que no requiera convertir primero a un flotador. Tan peligroso usar un flotador con moneda. –

1

Creé esta pequeña función para formatear automáticamente cualquier cosa en un buen formato de moneda.

function formatDollars($dollars) 
{ 
    return "$".number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)),2); 
} 

Editar

Se señaló que este no muestra valores negativos. Lo dividí en dos líneas para que sea más fácil editar el formato. Envolverlo en paréntesis si es un valor negativo:

function formatDollars($dollars) 
{ 
    $formatted = "$" . number_format(sprintf('%0.2f', preg_replace("/[^0-9.]/", "", $dollars)), 2); 
    return $dollars < 0 ? "({$formatted})" : "{$formatted}"; 
} 
+0

+1 para la función de lujo! –

+1

Esto no conserva los valores negativos – FlyingNimbus

+0

Esto es cierto. He actualizado la función para incluir compatibilidad con números negativos. Gracias @FlyingNimbus – DAWTSF

1

PHP tiene una función llamada money_format para hacer esto. Lea acerca de esto here.

Cuestiones relacionadas