我如何打印一个整数与逗号作为千分隔符?
1234567 ⟶ 1,234,567
在句点和逗号之间决定不需要特定于区域设置。
我如何打印一个整数与逗号作为千分隔符?
1234567 ⟶ 1,234,567
在句点和逗号之间决定不需要特定于区域设置。
当前回答
从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)
其他回答
下面是一些格式化的方法(与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中的Babel模块具有根据所提供的语言环境应用逗号的功能。
要安装babel,请运行以下命令。
pip install babel
使用
format_currency(1234567.89, 'USD', locale='en_US')
# Output: $1,234,567.89
format_currency(1234567.89, 'USD', locale='es_CO')
# Output: US$ 1.234.567,89 (raw output US$\xa01.234.567,89)
format_currency(1234567.89, 'INR', locale='en_IN')
# Output: ₹12,34,567.89
从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)
我得到了这个工作:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'en_US')
'en_US'
>>> locale.format("%d", 1255000, grouping=True)
'1,255,000'
当然,您不需要国际化支持,但它清晰、简洁,并使用了内置库。
附注:“%d”是通常的%样式格式化程序。您只能有一个格式化程序,但它可以是您在字段宽度和精度设置方面所需要的任何东西。
P.P.S.如果你不能在本地工作,我建议你修改一下Mark的答案:
def intWithCommas(x):
if type(x) not in [type(0), type(0L)]:
raise TypeError("Parameter must be an integer.")
if x < 0:
return '-' + intWithCommas(-x)
result = ''
while x >= 1000:
x, r = divmod(x, 1000)
result = ",%03d%s" % (r, result)
return "%d%s" % (x, result)
递归对于否定的情况是有用的,但是每个逗号一个递归对我来说似乎有点过分了。
当地unaware
'{:,}'.format(value) # For Python ≥2.7
f'{value:,}' # For Python ≥3.6
区域设置感知
import locale
locale.setlocale(locale.LC_ALL, '') # Use '' for auto, or force e.g. to 'en_US.UTF-8'
'{:n}'.format(value) # For Python ≥2.7
f'{value:n}' # For Python ≥3.6
参考
根据格式规范迷你语言,
','选项表示使用逗号作为千位分隔符。对于支持区域设置的分隔符,请使用'n'整数表示类型。