Estoy buscando formatear un número como 188518982.18 a £ 188,518,982.18 usando Python.
¿Cómo puedo hacer esto?
Estoy buscando formatear un número como 188518982.18 a £ 188,518,982.18 usando Python.
¿Cómo puedo hacer esto?
Respuestas:
Ver el módulo de configuración regional .
Esto hace 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'
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
y funcionó perfectamente.
>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'
$ 123,456.78
veces sin embargo. Editar: markdown elimina los espacios adicionales, pretende que hay más entre $ y los números
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 de Django) de los chicos de Edgewall es increíble para el formato de moneda (y muchas otras tareas de i18n). Es bueno porque no sufre la necesidad de hacer todo a nivel mundial, como el módulo central 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
locale
argumento format_currency
puede usarse para abordar esto, pero o eso no estaba en el documento hace cuatro años (cuando escribí ese comentario) o simplemente probé el código de esta respuesta tal como está sin consultar el documento.
Esta es una publicación antigua, pero acabo de implementar la siguiente solución que:
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, simplemente cambie $
por£
print(f'Value is: ${value:,.2f}'.replace('$-', '-$'))
Mi configuración regional parecía incompleta, así que también miré más allá de esta respuesta SO y encontré:
http://docs.python.org/library/decimal.html#recipes
Independiente del sistema operativo
Solo quería compartir aquí.
def moneyfmt(value, places=2, curr='', sep=',', dp='.', pos='', neg='-', trailneg='')
?
Si está utilizando OSX y aún no ha configurado el 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á utilizar lo siguiente:
locale.setlocale(locale.LC_ALL, 'en_US')
"{:0,.2f}".format(float(your_numeric_value))
en Python 3 hace el trabajo; da algo como una de las siguientes líneas:
10,938.29
10,899.00
10,898.99
2,328.99
Si fuera usted, usaría BABEL: http://babel.pocoo.org/en/latest/index.html
from babel.numbers import format_decimal
format_decimal(188518982.18, locale='en_US')
format_currency
.
Oh, esa es una bestia interesante.
He dedicado un tiempo considerable a hacerlo bien, hay tres problemas principales que difieren de un lugar a otro: - símbolo de moneda y dirección - separador de miles - punto decimal
He escrito mi propia implementación bastante extensa de esto, que es parte del marco de kiwi python, consulte la fuente LGPL: ed 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 en Windows u otros Unix.
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 esta publicación tiene sobre la otra es que funcionará con versiones anteriores de python. locale.currency se introdujo en python 2.5.
10,50 kr
lugar de kr 10,50
.
#impresión de la variable 'Total:' en un formato similar a este '9,348.237'
print ('Total:', '{:7,.3f}'.format(zum1))
donde '{: 7, .3f}' es el número de espacios para formatear el número en este caso es un millón con 3 puntos decimales. Luego agrega el '.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. La variable puede ser cualquier cosa que decidas usar.
Inspirado en el código anterior: D
def money_format(value):
value = str(value).split('.')
money = ''
count = 1
for digit in value[0][::-1]:
if count != 3:
money += digit
count += 1
else:
money += f'{digit},'
count = 1
if len(value) == 1:
money = ('$' + money[::-1]).replace('$-','-$')
else:
money = ('$' + money[::-1] + '.' + value[1]).replace('$-','-$')
return money
He llegado a mirar lo mismo y descubrí que Python-money no lo usó realmente todavía, pero tal vez una combinación de los dos sería buena
Una lambda para calcularlo dentro de una función, con la 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'
Código simple de python!
def format_us_currency(value):
value=str(value)
if value.count(',')==0:
b,n,v='',1,value
value=value[:value.rfind('.')]
for i in value[::-1]:
b=','+i+b if n==3 else i+b
n=1 if n==3 else n+1
b=b[1:] if b[0]==',' else b
value=b+v[v.rfind('.'):]
return '$'+(value.rstrip('0').rstrip('.') if '.' in value else value)
"$2,129.1468284147656"
, "$10,948.3742933"
, "$1,0908"
. Garbles la cuerda.
locale
uso del módulo del valor de la moneda y las propiedades de visualización de esa moneda.