我希望使用 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'

其他提示

新在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

不明白为什么它没有提到更多的在线(或在此线程),但巴贝尔包(和Django的公用事业)从Edgewall家伙是真棒货币格式(和许多其他国际化的任务)。这是很好的,因为它不从需要做的一切全球像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

独立于OS的

只是想在这里分享。

如果您正在使用OSX和尚未设置你的本地化模块设置这个第一个答案将无法正常工作,您将收到以下错误:

Traceback (most recent call last):File "<stdin>", line 1, in <module> 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')

哦,这是一个有趣的野兽。

我已经花了理解的正确的相当长的时间,也有从区域的不同而不同区域设置三个主要问题:   - 货币符号和方向   - 千个分隔符   - 小数点

我已经写了我自己相当广泛实施的这是猕猴桃的Python框架的一部分,检查了LGPL:这里编辑来源:

HTTP ://svn.async.com.br/cgi-bin/viewvc.cgi/kiwi/trunk/kiwi/currency.py视图=标记

的代码是略微的Linux / Glibc的具体,但不应该太难以采用到窗户或其它的Unix。

一旦你的安装,你可以做到以下几点:

>>> from kiwi.datatypes import currency
>>> v = currency('10.5').format()

那么,这将给你:

'$10.50'

'10,50 kr'

根据当前所选的语言环境。

这个帖子已超过其他主要的一点是,它会与旧版本的Python工作。 locale.currency在蟒2.5介绍

如果我是你,我会用BABEL: HTTP://babel.pocoo .ORG / EN /最新/ index.html中

from babel.numbers import format_decimal


format_decimal(188518982.18, locale='en_US')

#printing变量“总计:”在一个看起来像格式这个“9,348.237”

print ('Total:',   '{:7,.3f}'.format(zum1))

其中“{:7,.3f}” ES的用于在这种情况下的格式化数空间的数量是一百万3小数点。 然后添加了” .format(zum1)。该zum1是对所有号码在我的特别节目之大数量THA变量。变量可以是任何东西,你决定使用。

我来看看同样的事情,发现蟒蛇钱没有真正使用它尚未但也许这两者的组合将是一件好事。

一个用于计算它的函数内部,帮助从 @ Nate的答案拉姆达

converter = lambda amount, currency: "%s%s%s" %(
    "-" if amount < 0 else "", 
    currency, 
    ('{:%d,.2f}'%(len(str(amount))+3)).format(abs(amount)).lstrip())

和然后,

>>> converter(123132132.13, "$")
'$123,132,132.13'

>>> converter(-123132132.13, "$")
'-$123,132,132.13'

<强>简单的Python代码!

def format_us_currency(value):
    value=str(value)
    if value.count(',')==0:
        b,n,v='',1,value
        value=value[:value.rfind('.')]
        for i in value[::-1]:
            b=','+i+b if n==3 else i+b
            n=1 if n==3 else n+1
        b=b[1:] if b[0]==',' else b
        value=b+v[v.rfind('.'):]
    return '$'+(value.rstrip('0').rstrip('.') if '.' in value else value)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top