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,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',dp='.')
# End www.jb51.cc
结果:
1,234.45
很简单吧。。。
原文链接:https://www.f2er.com/python/527181.html