关于python:将逗号添加到整数的最简单方法是什么?

What's the easiest way to add commas to an integer?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
How to print number with commas as thousands separators?

例如:

1
2
>> print numberFormat(1234)
>> 1,234

或有内置函数在Python的这是什么?


到目前为止,还没有人提到新的','选项,该选项是在2.7版中添加到格式规范迷你语言中的——请参阅python 2.7文档中的新增功能中的PEP 378:数千分隔符的格式说明符。它很容易使用,因为您不必与locale纠结(但由于这一点,国际化受到限制,请参阅最初的PEP 378)。它可以处理浮点、整数和小数,以及迷你语言规范中提供的所有其他格式设置功能。

样品使用情况:

1
2
print format(1234,",d")    # -> 1,234
print"{:,d}".format(1234)  # -> 1,234

注意:虽然这个新功能确实很方便,但实际上并不像其他一些功能所建议的那样,更难使用locale模块。这样做的好处是,在输出数字、日期和时间等内容时,数字输出可以自动遵循各国使用的适当的千(和其他)分隔符约定。在不学习大量语言和国家代码的情况下,将计算机的默认设置生效也非常容易。你需要做的就是:

1
2
import locale
locale.setlocale(locale.LC_ALL, '')  # empty string for platform's default settings

这样做之后,您就可以使用通用的'n'类型代码来输出数字(整数和浮点)。在我所在的位置,逗号用作千位分隔符,因此在按上面所示设置区域设置之后,将发生以下情况:

1
2
print format(1234,"n")    # -> 1,234
print"{:n}".format(1234)  # -> 1,234

世界上大多数国家都使用句点而不是逗号,因此在许多位置设置默认区域设置(或在setlocale()调用中显式指定此类区域的代码)会产生以下结果:

1
2
print format(1234,"n")    # -> 1.234
print"{:n}".format(1234)  # -> 1.234

基于'd'',d'格式类型说明符的输出不受setlocale()的使用(或不使用)的影响。但是,如果使用locale.format()locale.format_string()函数,则会影响'd'说明符。


locale.format()

别忘了先适当地设置区域设置。


从Webpy utils.py中剥离:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
def commify(n):
   """
    Add commas to an integer `n`.

        >>> commify(1)
        '1'
        >>> commify(123)
        '123'
        >>> commify(1234)
        '1,234'
        >>> commify(1234567890)
        '1,234,567,890'
        >>> commify(123.0)
        '123.0'
        >>> commify(1234.5)
        '1,234.5'
        >>> commify(1234.56789)
        '1,234.56789'
        >>> commify('%.2f' % 1234.5)
        '1,234.50'
        >>> commify(None)
        >>>

   """

    if n is None: return None
    n = str(n)
    if '.' in n:
        dollars, cents = n.split('.')
    else:
        dollars, cents = n, None

    r = []
    for i, c in enumerate(str(dollars)[::-1]):
        if i and (not (i % 3)):
            r.insert(0, ',')
        r.insert(0, c)
    out = ''.join(r)
    if cents:
        out += '.' + cents
    return out

这里还有其他解决方案。


在整数上使用locale.format(),但要注意环境中的当前区域设置。某些环境可能没有此设置,或者设置为不提供通信结果的设置。

这里有一些我必须写的代码来处理这个确切的问题。它将根据您的平台自动为您设置区域设置:

1
2
3
4
5
6
try:
    locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') #use locale.format for commafication
except locale.Error:
    locale.setlocale(locale.LC_ALL, '') #set to default locale (works on windows)

score = locale.format('%d', player['score'], True)