我想用Python将188518982.18这样的数字格式化为188,518,982.18英镑.
我怎样才能做到这一点?
请参阅区域设置模块.
这样做了货币(和日期)格式.
>>> 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'
>>> '{:20,.2f}'.format(18446744073709551616.0) '18,446,744,073,709,551,616.00'
http://docs.python.org/dev/whatsnew/2.7.html#pep-0378
不太清楚为什么它没有在网上(或在这个帖子上)被提及,但来自Edgewall家伙的Babel软件包(和Django实用程序)对于货币格式化(以及许多其他i18n任务)来说非常棒.这很好,因为它不需要像核心Python语言环境模块那样全局地做所有事情.
OP给出的例子就是:
>>> import babel.numbers >>> import decimal >>> babel.numbers.format_currency( decimal.Decimal( "188518982.18" ), "GBP" ) £188,518,982.18
这是一篇古老的文章,但我刚刚实施了以下解决方案:
不需要外部模块
不需要创建新功能
可以在线完成
处理多个变量
处理负数美元金额
码:
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
而对于原来的海报,很明显,只要切换$
为£
我的语言环境设置似乎不完整,所以我也超越了这个SO答案,发现:
http://docs.python.org/library/decimal.html#recipes
独立操作系统
只是想在这里分享.
如果您正在使用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')