【发布时间】:2013-05-16 05:27:25
【问题描述】:
对于带有千位分隔符的打印数字, 可以使用python格式字符串:
'{:,}'.format(1234567890)
但是我怎样才能指定我想要一个用于千位分隔符的空间呢?
【问题讨论】:
对于带有千位分隔符的打印数字, 可以使用python格式字符串:
'{:,}'.format(1234567890)
但是我怎样才能指定我想要一个用于千位分隔符的空间呢?
【问题讨论】:
如果你不想惹locale,这是一个糟糕但简单的解决方案:
'{:,}'.format(1234567890.001).replace(',', ' ')
【讨论】:
@user136036 的答案相当不错,但遗憾的是它没有考虑到 Python 错误的现实。完整答案可能如下:
如果您平台的区域设置正常,则只需使用区域设置:
import locale
locale.setlocale(locale.LC_ALL, '')
print("{:,d}".format(7123001))
结果取决于您的语言环境和 Python 实现是否正常工作。
但是如果根据语言环境的 Python 格式被破坏了,例如Linux 上的 Python 3.5?
如果 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': '.'} 什么都不做。
如果您没有时间检查平台上哪些工作正常以及 Python 有哪些问题,您可以使用常规字符串替换功能(如果您想将逗号和点交换为点和逗号):
print("{:,.2f}".format(7123001.345).replace(",", "X").replace(".", ",").replace("X", "."))
用逗号替换空格很简单(点是小数分隔符):
print("{:,.2f}".format(7123001.345).replace(",", " ")
【讨论】:
'{:,d}'.format 不依赖于语言环境。您可能会将其与 '{:n}'.format 混淆。
这会将语言环境设置为您的默认操作系统位置:
import locale
locale.setlocale(locale.LC_ALL, '')
那么你可以使用:
"{0:n}".format(1234567890)
【讨论】:
您必须改用'n' 可识别区域设置的数字格式,并改用set your locale 以使用空格作为千位分隔符的格式。是的,这很痛苦。
'n'- 号码。这与'd'相同,只是它使用当前区域设置来插入适当的数字分隔符。
【讨论】:
str.format().
% 字符串格式?在任何 Python 版本中,这种类型的字符串格式都不支持n。
假设您编写代码:
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 美元。
注意:记住 USD、$ 或 £、kroner 等符号应与通用标准相匹配
【讨论】:
如果你不想使用本地,一个适用于各种大小字符串的解决方案:
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)
【讨论】:
Python 社区在PEP 378 下定义了它,您可以在其中看到主要提案包含format() 函数。因此,通过遵循该建议,我建议使用以下内容:
format(1234567890, ',d').replace(',',' ')
【讨论】: