with spanish miles commas python formatting currency

spanish - Formato de moneda en Python



python format miles (11)

Estoy buscando formatear un número como 188518982.18 a £ 188,518,982.18 usando Python.

¿Cómo puedo hacer esto?



# imprimiendo la variable ''Total:'' en un formato que se parece a este ''9,348.237''

print (''Total:'', ''{:7,.3f}''.format(zum1))

donde el ''{: 7, .3f}'' es el número de espacios para formatear el número en este caso es un millón con 3 decimales. Luego agrega el ''formato .format (zum1). El zum1 es la variable que tiene el número grande para la suma de todos los números en mi programa particular. Variable puede ser cualquier cosa que decida usar.


Esta es una publicación antigua, pero acabo de implementar la siguiente solución que:

  • No requiere módulos externos
  • No requiere crear una nueva función
  • Se puede hacer en línea
  • Maneja múltiples variables
  • Maneja cantidades negativas en dólares

Código:

num1 = 4153.53 num2 = -23159.398598 print ''This: ${:0,.0f} and this: ${:0,.2f}''.format(num1, num2).replace(''$-'',''-$'')

Salida:

This: $4,154 and this: -$23,159.40

Y para el póster original, obviamente, solo cambie $ por £


He llegado a ver lo mismo y he descubierto que python-money no lo usaba todavía, pero tal vez una mezcla de los dos sería buena.



No estoy seguro de por qué no se menciona más en línea (o en este hilo), pero el paquete Babel (y las utilidades Django) de los chicos de Edgewall es increíble para el formato de moneda (y muchas otras tareas de i18n). Es agradable porque no sufre la necesidad de hacer todo de forma global, como el módulo básico de Python.

El ejemplo que dio el OP sería simplemente:

>>> import babel.numbers >>> import decimal >>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" ) £188,518,982.18


Oh, es una bestia interesante.

He dedicado un tiempo considerable a hacerlo bien, hay tres problemas principales que difieren de la configuración regional a la configuración regional: - símbolo de moneda y dirección - separador de mil - coma decimal

He escrito mi propia y bastante extensa implementación de esto, que es parte del marco de kiwi python, eche un vistazo a la fuente de LGPL: aquí:

http://svn.async.com.br/cgi-bin/viewvc.cgi/kiwi/trunk/kiwi/currency.py?view=markup

El código es ligeramente específico de Linux / Glibc, pero no debería ser demasiado difícil de adoptar para Windows u otras Unixes.

Una vez que tenga eso instalado, puede hacer lo siguiente:

>>> from kiwi.datatypes import currency >>> v = currency(''10.5'').format()

Que luego te dará:

''$10.50''

o

''10,50 kr''

Dependiendo de la configuración regional seleccionada actualmente.

El punto principal que tiene esta publicación sobre la otra es que funcionará con versiones anteriores de python. locale.currency se introdujo en python 2.5.


Si está utilizando OSX y aún no ha configurado su configuración de módulo de configuración regional esta primera respuesta no funcionará, recibirá el siguiente error:

Traceback (most recent call last):File "<stdin>", line 1, in <module> File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 221, in currency raise ValueError("Currency formatting is not possible using "ValueError: Currency formatting is not possible using the ''C'' locale.

Para remediar esto, deberá hacer lo siguiente:

locale.setlocale(locale.LC_ALL, ''en_US'')



Una lambda para calcularlo dentro de una función, con ayuda de la respuesta de @ Nate

converter = lambda amount, currency: "%s%s%s" %( "-" if amount < 0 else "", currency, (''{:%d,.2f}''%(len(str(amount))+3)).format(abs(amount)).lstrip())

y entonces,

>>> converter(123132132.13, "$") ''$123,132,132.13'' >>> converter(-123132132.13, "$") ''-$123,132,132.13''


Vea el módulo locale .

Esto aplica el formato de moneda (y fecha).

>>> import locale >>> locale.setlocale( locale.LC_ALL, '''' ) ''English_United States.1252'' >>> locale.currency( 188518982.18 ) ''$188518982.18'' >>> locale.currency( 188518982.18, grouping=True ) ''$188,518,982.18''