本文最后更新于2015年11月7日,已超过 1 年没有更新,如果文章内容失效,还请反馈给我,谢谢!
『即每隔三位数字加一个逗号』
搜索关键字:
python integer Thousand points representation
python Thousand points representation
参考链接:
参考解答:
I too, prefer the “simplest practical way”. For >= 2.7:
"{:,}".format(value)
#举例如下
In [1]: aint = 9876543201
In [2]: type(aint), aint
Out[2]: (int, 9876543201)
In [3]: "{:,}".format(aint)
Out[3]: '9,876,543,201'
==
I got this to work:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'en_US')
'en_US'
>>> locale.format("%d", 1255000, grouping=True)
'1,255,000'
Sure, you don’t need internationalization support, but it’s clear, concise, and uses a built-in library.
P.S. That “%d” is the usual %-style formatter. You can have only one formatter, but it can be whatever you need in terms of field width and precision settings.
P.P.S. If you can’t get locale to work, I’d suggest a modified version of Mark’s answer:
def intWithCommas(x):
if type(x) not in [type(0), type(0L)]:
raise TypeError("Parameter must be an integer.")
if x < 0:
return '-' + intWithCommas(-x)
result = ''
while x >= 1000:
x, r = divmod(x, 1000)
result = ",%03d%s" % (r, result)
return "%d%s" % (x, result)
Recursion is useful for the negative case, but one recursion per comma seems a bit excessive to me.
==
For inefficiency and unreadability it’s hard to beat:
>>> import itertools
>>> s = '-1234567'
>>> ','.join(["%s%s%s" % (x[0], x[1] or '', x[2] or '') for x in itertools.izip_longest(s[::-1][::3], s[::-1][1::3], s[::-1][2::3])])[::-1].replace('-,','-')
=EOF=