『即每隔三位数字加一个逗号』
搜索关键字:
- python integer Thousand points representation
- python Thousand points representation
参考链接:
- http://stackoverflow.com/questions/1823058/how-to-print-number-with-commas-as-thousands-separators
- http://stackoverflow.com/questions/3909457/whats-the-easiest-way-to-add-commas-to-an-integer-in-python
- http://stackoverflow.com/questions/13082620/how-can-i-print-a-float-with-thousands-separators
参考解答:
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'
http://docs.python.org/library/string.html#format-specification-mini-language
==
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=