Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 什么';给整数加逗号最简单的方法是什么?_Python_Number Formatting - Fatal编程技术网

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在另一个答案中的评论所暗示的那样)。