Convertir un decimal a un formato monetario que se desee
La siguiente función sacada de la documentación de python y utilizando python 3.3.
from decimal import *
def moneyfmt(value, places=2, curr='', sep=',', dp='.', pos='', neg='-', trailneg=''):
q = Decimal(10) ** -places # 2 places --> '0.01'
sign, digits, exp = value.quantize(q).as_tuple()
result = []
digits = list(map(str, digits))
build, next = result.append, digits.pop
if sign:
build(trailneg)
for i in range(places):
build(next() if digits else '0')
if places:
build(dp)
if not digits:
build('0')
i = 0
while digits:
build(next())
i += 1
if i == 3 and digits:
i = 0
build(sep)
build(curr)
build(neg if sign else pos)
return ''.join(reversed(result))
Con tan solo pasarle el decimal a converit, la fucnion devuelve un str, con el formato $1.000.00.
>>>moneyfmt(Decimal('1000000.00'))
'1,000,000.00'
Si le pasamos los datos como la cantidad de centavos por defecto es '2', el signo de pesos dolar o euro por defecto es '$', el tipo de separador para los ciento y miles '.'
Otros parámetros como el separador de los centavos por defecto es ',' el carácter si el decimal es positivo por defecto '', el carácter si es negativo por defecto es '-' y el carácter final en tal caso que sea negativo.