我如何打印一个整数与逗号作为千分隔符?

1234567   ⟶   1,234,567

在句点和逗号之间决定不需要特定于区域设置。


当前回答

你也可以使用'{:n}'。区域设置表示的格式(值)。我认为这是最简单的现场解决方案。

有关更多信息,请在Python DOC中搜索数千个。

对于货币,可以使用locale。货币,设置标志分组:

Code

import locale

locale.setlocale( locale.LC_ALL, '' )
locale.currency( 1234567.89, grouping = True )

输出

'Portuguese_Brazil.1252'
'R$ 1.234.567,89'

其他回答

我相信这一定有一个标准的库函数,但尝试自己用递归写它很有趣,所以这是我想到的:

def intToStringWithCommas(x):
    if type(x) is not int and type(x) is not long:
        raise TypeError("Not an integer!")
    if x < 0:
        return '-' + intToStringWithCommas(-x)
    elif x < 1000:
        return str(x)
    else:
        return intToStringWithCommas(x / 1000) + ',' + '%03d' % (x % 1000)

话虽如此,如果其他人确实找到了一种标准的方法,那么您应该使用它。

从Python版本2.6,你可以这样做:

def format_builtin(n):
    return format(n, ',')

对于< 2.6的Python版本,仅供参考,这里有两个手动解决方案,它们将浮点数转换为整数,但负数可以正常工作:

def format_number_using_lists(number):
    string = '%d' % number
    result_list = list(string)
    indexes = range(len(string))
    for index in indexes[::-3][1:]:
        if result_list[index] != '-':
            result_list.insert(index+1, ',')
    return ''.join(result_list)

这里有几点需要注意:

string = '%d' % number漂亮地将数字转换为字符串,它支持负号,并从浮点数中删除分数,使它们成为整数; 这个切片索引[::-3]返回从开始的每第三个项 所以我使用了另一个切片[1:]来删除最后一项 因为我不需要在最后一个数字后面加逗号; 此条件如果l[index] != '-'被用于支持负数,则不要在减号后插入逗号。

还有一个更硬核的版本:

def format_number_using_generators_and_list_comprehensions(number):
    string = '%d' % number
    generator = reversed( 
        [
            value+',' if (index!=0 and value!='-' and index%3==0) else value
            for index,value in enumerate(reversed(string))
        ]
    )
    return ''.join(generator)

这是我处理浮点数的方法。尽管,老实说,我不确定它适用于哪个版本——我使用的是2.7:

my_number = 4385893.382939491

my_string = '{:0,.2f}'.format(my_number)

返回:4385893 .38点

更新:我最近有一个关于这种格式的问题(不能告诉你确切的原因),但能够通过删除0来修复它:

my_string = '{:,.2f}'.format(my_number)

下面是一些格式化的方法(与float和int类型兼容)

num = 2437.68

# Way 1: String Formatting

'{:,}'.format(num)
>>> '2,437.68'


# Way 2: F-Strings

f'{num:,}'
>>> '2,437.68'


# Way 3: Built-in Format Function

format(num, ',')
>>> '2,437.68'

这是烘焙到python per PEP -> https://www.python.org/dev/peps/pep-0378/

只需使用format(1000, ',d')来显示一个带千位分隔符的整数

PEP中描述了更多的格式,请尝试一下