python货币格式化方法[python基础教程]

python开发中时长到货币格式化的问题,一般情况下可以使用locale模块。但是这个模块使用起来不是那么顺手,今天我为大家介绍一个很好用的方法。

直接上代码。。。

from decimal import *
def moneyfmt(value, places=2, curr="", sep=",", dp=".",pos="", neg="-", trailneg=""):
    """Convert Decimal to a money formatted string.
 
    places:  required number of places after the decimal point
    curr:    optional currency symbol before the sign (may be blank)
    sep:     optional grouping separator (comma, period, space, or blank)
    dp:      decimal point indicator (comma or period)
             only specify as blank when places is zero
    pos:     optional sign for positive numbers: "+", space or blank
    neg:     optional sign for negative numbers: "-", "(", space or blank
    trailneg:optional trailing minus indicator:  "-", ")", space or blank
 
    >>> d = Decimal("-1234567.8901")
    >>> moneyfmt(d, curr="$")
    "-$1,234,567.89"
    >>> moneyfmt(d, places=0, sep=".", dp="", neg="", trailneg="-")
    "1.234.568-"
    >>> moneyfmt(d, curr="$", neg="(", trailneg=")")
    "($1,234,567.89)"
    >>> moneyfmt(Decimal(123456789), sep=" ")
    "123 456 789.00"
    >>> moneyfmt(Decimal("-0.02"), neg="<", trailneg=">")
    "<0.02>"
 
    """
    value = Decimal(value)
    q = Decimal(10) ** -places      # 2 places --> "0.01"
    sign, digits, exp = value.quantize(q).as_tuple()
    result = []
    digits = map(str, digits)
    build, next = result.append, digits.pop
    if sign:
        build(trailneg)
    for i in range(places):
        build(next() if digits else "0")
    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))
 
print moneyfmt("1234.45",sep=",", dp=".")

结果:

1,234.45

很简单吧。。。

来源:PY学习网:原文地址:https://www.py.cn/article.html

hmoban主题是根据ripro二开的主题,极致后台体验,无插件,集成会员系统
自学咖网 » python货币格式化方法