Python中的货币格式

问题描述 投票:130回答:12

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

我怎样才能做到这一点?

python formatting currency
12个回答
183
投票

请参阅locale模块。

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

>>> 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'

0
投票

我来看看同样的事情,发现python-money还没有真正使用它,但也许两者的混合会很好


0
投票

@Nate's answer的帮助下,在函数内计算它的lambda

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'

0
投票

简单的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)

86
投票

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


39
投票

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

OP给出的例子就是:

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

21
投票

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

  • 不需要外部模块
  • 不需要创建新功能
  • 可以在线完成
  • 处理多个变量
  • 处理负数美元金额

码:

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

而对于原始海报,显然,只需切换$£


16
投票

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

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

独立操作系统

只是想在这里分享。


9
投票

如果您正在使用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')

3
投票

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

我已经花了相当多的时间来做到这一点,有三个主要问题,从区域设置到区域设置: - 货币符号和方向 - 千位分隔符 - 小数点

我已经编写了我自己相当广泛的实现,这是kiwi python框架的一部分,请查看LGPL:ed源代码:

http://svn.async.com.br/cgi-bin/viewvc.cgi/kiwi/trunk/kiwi/currency.py?view=markup

代码略微特定于Linux / Glibc,但不应该太难采用到Windows或其他unix。

安装完成后,您可以执行以下操作:

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

然后会给你:

'$10.50'

要么

'10,50 kr'

取决于当前选择的区域设置。

这篇文章的主要观点是它可以与旧版本的python一起使用。 locale.currency是在python 2.5中引入的。


3
投票

如果我是你,我会使用BABEL:http://babel.pocoo.org/en/latest/index.html

from babel.numbers import format_decimal


format_decimal(188518982.18, locale='en_US')

1
投票

#printing变量'Total:'的格式看起来像'9,348.237'

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

其中'{:7,.3f}'在这种情况下格式化数字的空格数是一百万,带有3个小数点。然后添加'.format(zum1)。 zum1是变量,具有我的特定程序中所有数字之和的大数字。变量可以是您决定使用的任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.