在Python中对整数用千分位表示


『即每隔三位数字加一个逗号』

搜索关键字:
  • 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'

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=

,

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注