python-将“十进制标记”千位分隔符添加到一个数字
如何在Python中将1000000格式化为1.000.000? 哪里是“。” 是带小数点的千位分隔符。
8个解决方案
103 votes
如果要添加千位分隔符,可以编写:
>>> '{0:,}'.format(1000000)
'1,000,000'
但它仅适用于Python 2.7及更高版本。
请参阅格式字符串语法。
在旧版本中,可以使用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'
Mikel answered 2020-01-19T04:34:39Z
17 votes
我不是很了解。 但是我的理解是:
您想要将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'
utdemir answered 2020-01-19T04:35:12Z
12 votes
只是在这里扩展答案:)
我既要有千分之一的分隔符,又要限制浮点数的精度。
这可以通过使用以下格式字符串来实现:
> 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]
jpihl answered 2020-01-19T04:35:50Z
4 votes
一个主意
def itanum(x):
return format(x,',d').replace(",",".")
>>> itanum(1000)
'1.000'
Giovanni G. PY answered 2020-01-19T04:36:10Z
1 votes
使用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'
Eugene Yarmash answered 2020-01-19T04:36:29Z
1 votes
利用Mikel的答案,我在matplotlib图中实现了他的解决方案。 我认为有些人可能会觉得有帮助:
ax=plt.gca()
ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, loc: locale.format('%d', x, 1)))
Marcus Seuser answered 2020-01-19T04:36:49Z
0 votes
这只是一个替代答案。您可以在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
anand tripathi answered 2020-01-19T04:37:14Z
0 votes
奇怪的是,没有人提到使用正则表达式的简单解决方案:
import re
print(re.sub(r'(?
提供以下输出:
12.345.673.456.456.456
如果只想在逗号前分开数字,它也可以使用:
re.sub(r'(?
给出:
123.456.734,56456456
正则表达式使用前瞻性检查给定位置后的位数是否可被3整除。
Andrey Tyukin answered 2020-01-19T04:37:51Z