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

很简单吧。。。

以上是 python货币格式化方法 的全部内容, 来源链接: utcz.com/z/523551.html

回到顶部