我想生成一个如下所示的XML:
<amount currency="AUD">123.00</amount>
我可以通过“{0:.2f}”。格式(123)很容易地制作它,这很好,花花公子;但是许多货币传统上没有用两个小数点表示,例如:
<amount currency="JPY">12345</amount>
<amount currency="KWD">12345.678</amount>
<amount currency="BTC">1.23456789</amount> # bonus point
我不希望像locale或babel提供的那样以最终用户为导向的本地化。这些面向用户的本地化库还可以本地化分组分隔符,小数点和添加货币符号,这在格式化货币以便向用户显示时很好,但这些不适合机器到机器的通信,因为它们使解析更多接收机很难。
来自语言环境的货币函数符号= False几乎是我想要的:
In [1]: locale.setlocale(locale.LC_ALL, 'ar_KW')
Out[1]: 'ar_KW'
In [2]: locale.currency(4, False)
Out[2]: '4.000'
但有两个问题:
babel的format_currency甚至没有使用正确的小数位数:
In [3]: babel.numbers.format_currency(4, 'KWD')
Out[3]: u'KWD12.00'
当然,我可以通过从this这样的列表中收集来维持这样一个字典,但这似乎应该是一个已经解决的问题。
是否有一个python库知道如何使用正确的小数位数格式化货币金额?我希望能够这样称呼它:to_currency(amount=Decimal('12345.67890'), currency='OMR', symbol=False)
。
答案 0 :(得分:0)
这对我有用:
>>> print babel.numbers.format_currency(4, 'KWD')
KWD4.000
>>> print babel.numbers.format_currency(4, 'KWD', currency_digits=False)
KWD4.00
>>> print babel.numbers.format_currency(4, 'KWD', locale="ar_KW")
د.ك. 4.000