我希望使用Python将188518982.18这样的数字格式化为188,518,982.18英镑。
我该怎么做?
答案 0 :(得分:177)
请参阅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'
答案 1 :(得分:86)
>>> '{:20,.2f}'.format(18446744073709551616.0)
'18,446,744,073,709,551,616.00'
答案 2 :(得分: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
答案 3 :(得分: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
显然,对于原始海报,只需为$
£
即可
答案 4 :(得分:16)
我的语言环境设置似乎不完整,所以我也超越了这个SO答案,发现:
http://docs.python.org/library/decimal.html#recipes
独立于OS的
只是想在这里分享。
答案 5 :(得分: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')
答案 6 :(得分: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中引入的。
答案 7 :(得分:3)
"{:0,.2f}".format(float(your_numeric_value))
完成了这项工作;它给出了类似以下几行之一的内容:
10,938.29
10,899.00
10,898.99
2,328.99
答案 8 :(得分:2)
如果我是你,我会使用BABEL:http://babel.pocoo.org/en/latest/index.html
from babel.numbers import format_decimal
format_decimal(188518982.18, locale='en_US')
答案 9 :(得分:1)
#printing变量'Total:'的格式看起来像'9,348.237'
print ('Total:', '{:7,.3f}'.format(zum1))
其中'{:7,.3f}'在这种情况下格式化数字的空格数是一百万,带有3个小数点。 然后添加'.format(zum1)。 zum1是变量,具有我的特定程序中所有数字之和的大数字。变量可以是您决定使用的任何内容。
答案 10 :(得分:1)
受以上代码启发:D
def money_format(value):
value = str(value).split('.')
money = ''
count = 1
for digit in value[0][::-1]:
if count != 3:
money += digit
count += 1
else:
money += f'{digit},'
count = 1
if len(value) == 1:
money = ('$' + money[::-1]).replace('$-','-$')
else:
money = ('$' + money[::-1] + '.' + value[1]).replace('$-','-$')
return money
答案 11 :(得分:0)
我来看同样的事情,发现python-money还没有真正使用它,但也许两者的混合会很好
答案 12 :(得分:0)
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'
答案 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)
答案 14 :(得分:0)
这里已经有十几种解决方案,但我相信下面的一个是最好的,因为:
使用语言环境 currency
:
import locale
locale.setlocale(locale.LC_ALL, '') # this sets locale to the current Operating System value
print(locale.currency(1346896.67444, grouping=True, symbol=True)
将在我的 Windows 10 中输出配置为巴西葡萄牙语:
R$ 1.346.896,67
它有点冗长,所以如果你经常使用它,也许最好预先定义一些参数并使用较短的名称并在 f 字符串中使用它:
fmt = lambda x: locale.currency(x, grouping=True, symbol=True)
print(f"Value: {fmt(1346896.67444)}"
您可以为 setlocale
方法传递语言环境,但其值取决于操作系统,因此请注意。您也可以关闭符号。