Convertir decimal a formato monetario python 3

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 '.'
>>> moneyfmt(Decimal('1000000.00'), 2, '$', ',')
'$1,000,000.00'
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.
>>> moneyfmt(Decimal('1000000.00'), 2, '$', ',', ',', '+', '(', ')' )
'+$1,000,000,00'
>>> moneyfmt(Decimal('-1000000.00'), 2, '$', ',', ',', '+', '(', ')' )
'($1,000,000,00)'
Fuente: http://docs.python.org/3.3/library/decimal.html#recipes

Entradas más populares de este blog

Convertir disco virtualbox.ova a qemu.qcow2

Mi cambio de asterisk a FreeSWITCH

Python, Redis una combinacion estupenda.

disqus

comments powered by Disqus