80

要打印带有千位分隔符的数字,可以使用 python 格式字符串:

'{:,}'.format(1234567890)

但是如何指定我想要千位分隔符的空间?

4

7 回答 7

98

如果您不想惹麻烦,这是一个糟糕但简单的解决方案locale

'{:,}'.format(1234567890.001).replace(',', ' ')
于 2013-09-19T09:30:55.907 回答
30

@user136036 的回答很好,但不幸的是它没有考虑到 Python 错误的现实。完整的答案可能如下:

变体 A

如果您平台的区域设置正常,则只需使用区域设置:

import locale
locale.setlocale(locale.LC_ALL, '')
print("{:,d}".format(7123001))

结果取决于您的语言环境和 Python 实现是否正常工作。

但是如果根据语言环境的 Python 格式被破坏了,例如 Linux 上的 Python 3.5 怎么办?

变体 B

如果 Python 不尊重grouping=True参数,您可以使用语言环境和解决方法(使用货币格式):

locale.setlocale(locale.LC_ALL, '')
locale._override_localeconv = {'mon_thousands_sep': '.'}
print(locale.format('%.2f', 12345.678, grouping=True, monetary=True))

以上给出了我平台上的 12.345,68。将货币设置为 False 或省略它 - Python 不会对数千进行分组。指定locale._override_localeconv = {'thousands_sep': '.'}什么都不做。

变体 C

如果您没有时间检查平台上哪些工作正常以及 Python 有哪些问题,您可以使用常规字符串替换功能(如果您想将逗号和点交换为点和逗号):

print("{:,.2f}".format(7123001.345).replace(",", "X").replace(".", ",").replace("X", "."))

用逗号替换空格是微不足道的(假设点是小数分隔符):

print("{:,.2f}".format(7123001.345).replace(",", " ")

于 2016-05-25T17:26:42.613 回答
18

这会将语言环境设置为您的默认操作系统位置:

import locale
locale.setlocale(locale.LC_ALL, '')

然后你可以使用:

"{0:n}".format(1234567890)
于 2013-11-11T17:42:03.163 回答
13

您必须改用可'n'识别区域设置的数字格式,并将您的区域设置设置为使用空格作为千​​位分隔符的区域设置。是的,这很痛苦。

'n'- 数字。这与 相同'd',只是它使用当前语言环境设置插入适当的数字分隔符。

于 2013-05-21T12:37:31.233 回答
1

假设您编写代码:

print(f'{name} | Yearly salary: ${salary}.')

打印 -> 凯特 | 年薪:60000美元。

首先放一个 , 分隔符:

print(f'{name} | Yearly salary: ${salary:,}.')

打印 -> 凯特 | 年薪:60,000美元。

然后用空格替换逗号:

print(f'{name} | Yearly salary: {salary:,} USD.'.replace(',', ' '))

打印 -> 凯特 | 年薪:60 000 美元。

注意:请记住美元、美元或英镑、克朗等符号应符合相应的通用标准

于 2021-11-12T22:49:49.577 回答
0

Python 社区在PEP 378下对其进行了定义,您可以在其中看到主要提案包括format()功能。因此,通过遵循该建议,我建议使用以下内容:

format(1234567890, ',d').replace(',',' ')
于 2021-10-12T15:33:35.710 回答
0

如果您不想使用本地,则可以使用适用于各种字符串大小的解决方案:

    def format_number(string):
        j = len(string) % 3
        substrings = [string[3 * i + j:3 * (i + 1) + j] for i in                                         range(len(string)//3)]
        if j != 0:
            substrings.insert(0, string[:j])
        return " ".join(substrings)
于 2021-10-12T14:21:54.257 回答