将'decimal-mark'千位分隔符添加到数字中

时间:2011-04-01 12:50:41

标签: python format locale number-formatting digit-separator

如何在Python中将1000000格式化为1.000.000?在哪里'。'是十进制标记千位分隔符。

8 个答案:

答案 0 :(得分:102)

如果要添加千位分隔符,可以写:

>>> '{0:,}'.format(1000000)
'1,000,000'

但它仅适用于Python 2.7及更高版本。

请参阅format string syntax

在旧版本中,您可以使用locale.format()

>>> import locale
>>> locale.setlocale(locale.LC_ALL, '')
'en_AU.utf8'
>>> locale.format('%d', 1000000, 1)
'1,000,000'

使用locale.format()的额外好处是它将使用您的语言环境的千位分隔符,例如

>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE.utf-8')
'de_DE.utf-8'
>>> locale.format('%d', 1000000, 1)
'1.000.000'

答案 1 :(得分:17)

我真的不明白;但这是我的理解:

您想将1123000转换为1,123,000。您可以使用格式:

http://docs.python.org/release/3.1.3/whatsnew/3.1.html#pep-378-format-specifier-for-thousands-separator

示例:

>>> format(1123000,',d')
'1,123,000'

答案 2 :(得分:12)

在这里稍微扩展一下答案:)

我需要都有千分之一的分隔符并限制浮点数的精度。

这可以通过使用以下格式字符串来实现:

> my_float = 123456789.123456789
> "{:0,.2f}".format(my_float)
'123,456,789.12'

这描述了format() - 说明符的迷你语言:

[[fill]align][sign][#][0][width][,][.precision][type]

来源:https://www.python.org/dev/peps/pep-0378/#current-version-of-the-mini-language

答案 3 :(得分:3)

一个主意

def itanum(x):
    return format(x,',d').replace(",",".")

>>> itanum(1000)
'1.000'

答案 4 :(得分:1)

使用itertools可以为您提供更多灵活性:

>>> from itertools import zip_longest
>>> num = "1000000"
>>> sep = "."
>>> places = 3
>>> args = [iter(num[::-1])] * places
>>> sep.join("".join(x) for x in zip_longest(*args, fillvalue=""))[::-1]
'1.000.000'

答案 5 :(得分:1)

根据Mikel的回答,我在matplotlib情节中实现了他的解决方案。我想有些人可能觉得它很有用:

ax=plt.gca()
ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, loc: locale.format('%d', x, 1)))

答案 6 :(得分:0)

这里只是一个替代答案。 您可以在python中使用split运算符并通过一些奇怪的逻辑 这是代码

i=1234567890
s=str(i)
str1=""
s1=[elm for elm in s]
if len(s1)%3==0:
    for i in range(0,len(s1)-3,3):
        str1+=s1[i]+s1[i+1]+s1[i+2]+"."
    str1+=s1[i]+s1[i+1]+s1[i+2]
else:
    rem=len(s1)%3
    for i in range(rem):
        str1+=s1[i]
    for i in range(rem,len(s1)-1,3):
        str1+="."+s1[i]+s1[i+1]+s1[i+2]

print str1

输出

1.234.567.890

答案 7 :(得分:0)

奇怪的是,没有人提到使用正则表达式的直接解决方案:

import re
print(re.sub(r'(?<!^)(?=(\d{3})+$)', r'.', "12345673456456456"))

提供以下输出:

12.345.673.456.456.456

如果您只想在逗号之前分隔数字,它也有效:

re.sub(r'(?<!^)(?=(\d{3})+,)', r'.', "123456734,56456456")

给出:

123.456.734,56456456

正则表达式使用前瞻来检查给定位置后的位数是否可被3整除。