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

ens*_*are 35 python number-formatting

可能重复:
如何使用逗号作为千位分隔符打印数字?

例如:

>> print numberFormat(1234)
>> 1,234
Run Code Online (Sandbox Code Playgroud)

或者Python中是否有内置函数来执行此操作?

mar*_*eau 95

没有人迄今已提到的新','这是在2.7版本加入选项格式化规范的迷你语言 -见PEP 378:格式说明千位分隔符在Python 2.7文档新增.它很容易使用,因为你不必乱用locale(但由于这个原因,仅限于国际化,请参阅最初的PEP 378).它适用于浮点数,整数和小数 - 以及迷你语言规范中提供的所有其他格式化功能.

样品用法:

print format(1234, ",d")    # -> 1,234
print "{:,d}".format(1234)  # -> 1,234
Run Code Online (Sandbox Code Playgroud)

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

import locale
locale.setlocale(locale.LC_ALL, '')  # empty string for platform's default settings
Run Code Online (Sandbox Code Playgroud)

完成后,您可以使用泛型'n'类型代码输出数字(整数和浮点数).我在哪里,逗号被用作千位分隔符,所以在设置如上所示的语言环境之后,会发生这种情况:

print format(1234, "n")    # -> 1,234
print "{:n}".format(1234)  # -> 1,234
Run Code Online (Sandbox Code Playgroud)

为此目的,世界其他大部分地区使用句点而不是逗号,因此在许多位置设置默认语言环境(或在setlocale()调用中明确指定此类区域的代码)会产生以下结果:

print format(1234, "n")    # -> 1.234
print "{:n}".format(1234)  # -> 1.234
Run Code Online (Sandbox Code Playgroud)

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

  • 好的,在Python 2.x中使用`locale`对于Unicode字符串不起作用.我的坏(尽管我从来没有声称它).如果语言环境设置为法语,`format(1234,"n")`会产生"1 234"而不会引发异常.**你的问题:**为什么你还没有投票或者至少评论过这里建议使用`locale`作为主要答案的其他答案? (7认同)
  • -1不幸的是这被打破了**; 它延续了语言环境模块的遗留性 - **它无法正常使用unicode**.在一个语言环境(例如法语,俄语)中尝试`format(1234,u"n")`,其中千位分隔符是NO-BREAK SPACE.你得到了新手最喜欢的例外:`UnicodeDecodeError:'ascii'编解码器无法解码字节0xa0 ...... (3认同)

Ign*_*ams 13

locale.format()

不要忘记首先正确设置区域设置.


sys*_*out 11

webpy 剥离utils.py:

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
Run Code Online (Sandbox Code Playgroud)

还有其他的解决方案在这里.

  • +1 尽管有文档字符串,但看起来它处理浮点数和整数。变量名称“dollars”和“cents”的使用,除了有点过于以应用程序为中心之外,似乎也支持了这个假设。非常可移植的 Python 版本,如所呈现的,将返回到 2.3 版,如果 `enumerate()` 迭代器被替换为等效的东西,则一直返回到 2.0 版。 (2认同)
  • 对于 Python 2.4+,`str(dollars)[::-1]` 可以替换为更易读的 `reversed(str(dollars))`。 (2认同)

Aph*_*hex 5

locale.format()在整数上使用,但要注意您环境中的当前语言环境。某些环境可能没有设置或设置为不会给您逗号结果的内容。

这是我必须编写的一些代码来处理这个确切的问题。它会根据您的平台自动为您设置语言环境:

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)
Run Code Online (Sandbox Code Playgroud)