当前位置:  开发笔记 > 编程语言 > 正文

Python中的货币格式

如何解决《Python中的货币格式》经验,为你挑选了6个好方法。

我想用Python将188518982.18这样的数字格式化为188,518,982.18英镑.

我怎样才能做到这一点?



1> S.Lott..:

请参阅区域设置模块.

这样做了货币(和日期)格式.

>>> import locale
>>> locale.setlocale( locale.LC_ALL, '' )
'English_United States.1252'
>>> locale.currency( 188518982.18 )
'$188518982.18'
>>> locale.currency( 188518982.18, grouping=True )
'$188,518,982.18'


我如何正确地格式化非本地货币,说我显示日语报告的成本(以GB为单位)?
这仍然不适合我,但我把它改为`locale.setlocale(locale.LC_ALL,'en_US.UTF-8')`它完美无缺!
@TokenMacGuy:这是一个特技问题.日语报告表示日语逗号和小数位规则,但GB磅货币符号 - Locale不支持.您必须创建自定义的区域设置定义.
@panchicore括号表示的负数表示法是会计界的常见做法.在oocalc或excel中尝试,并将数字格式化为会计类型.

2> nate c..:

2.7的新功能

>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'

http://docs.python.org/dev/whatsnew/2.7.html#pep-0378


这很整洁,但并没有真正回答这个问题,因为所请求的解决方案将包含货币符号,并且您还对小数点后的位数进行硬编码,这是特定于区域设置的.如果您不只是想要逗号放置,则有更多理由使用接受的区域设置答案.
@mrooney还有很多理由不使用接受的语言环境答案,例如不导入整个模块.
@mrooney:你可以这样做:'$ {:0,.2f}'.format(184467616.1),你现在有了这个符号

3> glenc..:

不太清楚为什么它没有在网上(或在这个帖子上)被提及,但来自Edgewall家伙的Babel软件包(和Django实用程序)对于货币格式化(以及许多其他i18n任务)来说非常棒.这很好,因为它不需要像核心Python语言环境模块那样全局地做所有事情.

OP给出的例子就是:

>>> import babel.numbers
>>> import decimal
>>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" )
£188,518,982.18


很晚的注意事项:测试一下,它似乎不会智能地格式化货币,因为它只是在金额之前粘贴适当的符号(格式化为您设置的区域,这是合理的),无论该货币是否实际使用其符号作为前缀.

4> elPastor..:

这是一篇古老的文章,但我刚刚实施了以下解决方案:

不需要外部模块

不需要创建新功能

可以在线完成

处理多个变量

处理负数美元金额

码:

num1 = 4153.53
num2 = -23159.398598

print 'This: ${:0,.0f} and this: ${:0,.2f}'.format(num1, num2).replace('$-','-$')

输出:

This: $4,154 and this: -$23,159.40

而对于原来的海报,很明显,只要切换$£


好主意!使用Python 3.6和f字符串,它看起来更加漂亮:`print(f'Value is:$ {value:,。2f}'。replace('$-','-$'))`

5> user37986..:

我的语言环境设置似乎不完整,所以我也超越了这个SO答案,发现:

http://docs.python.org/library/decimal.html#recipes

独立操作系统

只是想在这里分享.



6> simoes..:

如果您正在使用OSX并且尚未设置区域设置模块设置,则第一个答案将无效,您将收到以下错误:

Traceback (most recent call last):File "", line 1, in  File "/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/locale.py", line 221, in currency
raise ValueError("Currency formatting is not possible using "ValueError: Currency formatting is not possible using the 'C' locale.

要解决此问题,您必须使用以下内容:

locale.setlocale(locale.LC_ALL, 'en_US')


locale.setlocale(locale.LC_ALL,'en_US.UTF-8')对我有用
推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有