Babel 数字 format_currency 函数

Pal*_*mer 4 python currency python-2.7 python-babel

我正在一个使用多种语言的网站上工作,为了相应地显示价格/货币,我们使用了 babel 库。问题是当调用 format_currency 时,它总是返回美分部分,即使价格被显式转换为整数。

例子:

>>> print format_currency(100, 'EUR', locale='fr_FR')
100,00 €

>>> print format_currency(int(100), 'EUR', locale='fr_FR')
100,00 €
Run Code Online (Sandbox Code Playgroud)

有没有办法解决这个问题,以便返回值排除美分部分以具有类似的东西

>>> print format_currency(int(100), 'EUR', locale='fr_FR')
100 €
Run Code Online (Sandbox Code Playgroud)

小智 6

您必须添加带有格式的currency_digits参数才能实现您的目标

\n\n
>>> print(format_currency(100, 'EUR', locale='fr_FR')\n100,00\xc2\xa0\xe2\x82\xac\n>>> print(format_currency(100, 'EUR', locale='fr_FR', currency_digits=False))\n100,00\xc2\xa0\xe2\x82\xac\n>>> print(format_currency(100, 'EUR', format=u'#,##0\\xa0\xc2\xa4', locale='fr_FR'))\n100,00\xc2\xa0\xe2\x82\xac\n>>> print(format_currency(100, 'EUR', format=u'#,##0\\xa0\xc2\xa4', locale='fr_FR', currency_digits=False))\n100\xc2\xa0\xe2\x82\xac\n
Run Code Online (Sandbox Code Playgroud)\n


Mar*_*ers 5

您可以指定自定义格式:

format_currency(100, 'EUR', format=u'#,##0\xa0¤', locale='fr_FR')
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请参阅LDML 标记规范;该\xa0字节是一个U+00A0 无中断空格字符;而不是一个普通的空间。

为fr_FR默认的是#,##0.00\xa0¤,并且.00部分信号,一个小数部分应该用两位数字进行打印,如果不存在填充。我上面的示例只是删除了小数部分,.##如果数字不是精确整数,您也可以使用允许分数,但请注意,在这种情况下,.5打印的值没有第二位数字!

演示:

>>> from babel.numbers import format_currency
>>> print format_currency(100, 'EUR', format=u'#,##0\xa0¤', locale='fr_FR')
100 €
>>> print format_currency(100.0, 'EUR', format=u'#,##0.##\xa0¤', locale='fr_FR')
100 €
Run Code Online (Sandbox Code Playgroud)

  • 我在这里找到了答案(https://github.com/python-babel/babel/issues/478#issuecomment-290365787)。 (2认同)