Python 什么';给整数加逗号最简单的方法是什么?
可能重复:Python 什么';给整数加逗号最简单的方法是什么?,python,number-formatting,Python,Number Formatting,可能重复: 例如: >> print numberFormat(1234) >> 1,234 或者Python中有内置函数可以实现这一点吗? 别忘了先适当设置区域设置。从utils.py中删除: def commify(n): """ Add commas to an integer `n`. >>> commify(1) '1' >>> commify(123)
例如:
>> print numberFormat(1234)
>> 1,234
或者Python中有内置函数可以实现这一点吗?
别忘了先适当设置区域设置。从utils.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
还有其他解决方案。对整数使用locale.format()
,但要注意环境中的当前区域设置。某些环境可能没有此设置,或者设置为不会给您带来一致结果的内容
这里有一些我必须编写的代码来处理这个问题。它将根据您的平台自动为您设置语言环境:
try:
locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') #use locale.format for commafication
except locale.Error:
locale.setlocale(locale.LC_ALL, '') #set to default locale (works on windows)
score = locale.format('%d', player['score'], True)
到目前为止,还没有人提到新的
,“
选项,该选项是在2.7版中添加到格式规范迷你语言中的--请参阅中的。它很容易使用,因为您不必乱搞语言环境
(但由于这一点,国际化受到限制,请参阅)。它适用于浮点、整数和小数,以及mini language spec中提供的所有其他格式特性
示例用法:
print format(1234, ",d") # -> 1,234
print "{:,d}".format(1234) # -> 1,234
注意:虽然这个新功能确实很方便,但实际上使用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()
的使用(或未使用)的影响。但是,如果改用or函数,则'd'
说明符会受到影响。+1尽管有docstring,但看起来它处理浮点和整数。变量名“美元”和“美分”的使用,除了有点过于以应用程序为中心外,似乎支持这一假设。非常可移植的Python版本,如本文所述,将可追溯到2.3版,并且如果将enumerate()
迭代器替换为等效的东西,一直追溯到2.0版。对于Python 2.4+,可以将str(美元)[::-1]
替换为可读性更高的reversed(str(美元))
@martineau nice review,我在Google App Engine上使用了这个函数,Python限制在2.5版的开箱即用。这个家伙对负数不太管用:-,123456.00美元在你在enumerate中使用str(美元)之前不是已经是字符串了吗?-1不幸的是,这是坏的;它延续了locale模块的合法性——它不能与unicode一起正常工作。尝试在区域设置(例如法语、俄语)中使用格式(1234,u“n”)
,其中千位分隔符是一个不间断的空格。你得到了新手们最喜欢的例外:UnicodeDecodeError:“ascii”编解码器无法解码字节0xa0…
@John Machin:为了记录在案,在我添加关于使用语言环境的注释之前,大多数人都对这个答案进行了投票——为了大家的启发,目前正确的解释是,为什么要以特定于语言环境的方式来处理Unicode?谢谢。(1)投票的时间有什么关系??(2) 没有Python-2.X支持的启示,只是一个混乱:format(1234,“n”).decode(locale.getpreferredencoding())
:-(好的,在Python 2.X中使用locale
对Unicode字符串不起作用。我的错(尽管我从未声明过)。如果将locale设置为法语,format(1234,“n”)
结果是1234
,没有提出任何例外。您的问题:为什么您还没有对建议使用locale
作为主要答案的其他答案进行否决或至少发表评论?{,}格式也适用于浮点数:例如'{:,.2f}'。格式(MyUSD)
格式为美元和美分。不要忘记为可选分组参数指定一个True
值,例如在locale.format(u'%d',1234,True)
中。显然locale
在处理Unicode方面并不完全无能(正如@John Machin在另一个答案中的评论所暗示的那样)。