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

38 投票
4 回答
49544 浏览
提问于 2025-04-16 05:20

可能是重复的问题:
如何将数字打印成带逗号的千位分隔符?

举个例子:

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

或者在Python中有没有现成的函数可以做到这一点?

4 个回答

12

这段内容摘自webpyutils.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

还有其他解决方案可以在这里找到。

13

locale.format()

记得先正确设置地区信息哦。

103

到目前为止,没有人提到在2.7版本中新增的','选项,这个选项是为了格式规范小语言而添加的——你可以查看PEP 378: 用于千位分隔符的格式说明符,在Python 2.7的新特性文档中。这个功能很简单,因为你不需要去处理locale(但由于这个原因,它在国际化方面有些限制,具体可以看原始的PEP 378)。它可以用于浮点数、整数和小数——以及小语言规范中提供的所有其他格式化功能。

示例用法:

print format(1234, ",d")    # -> 1,234
print "{:,d}".format(1234)  # -> 1,234
print(f'{1234:,d}')         # -> 1,234 (Python 3.6+)

注意:虽然这个新功能确实很方便,但实际上使用locale模块并没有那么复杂,正如其他人所建议的那样。使用locale的好处是,输出的数字、日期和时间等可以自动遵循各个国家使用的千位(和其他)分隔符的规范。而且,你可以很容易地使用电脑的默认设置,而不需要学习一堆语言和国家代码。你只需要做的是:

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

完成这些后,你可以直接使用通用的'n'类型代码来输出数字(包括整数和浮点数)。在我所在的地方,逗号被用作千位分隔符,所以在设置好上面的地区后,结果会是这样的:

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

世界上大部分地方使用句点而不是逗号来作为千位分隔符,因此在许多地方设置默认地区(或者在setlocale()调用中明确指定这样的地区代码)会产生以下结果:

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

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

撰写回答