Добавьте десятичные разделители тысяч к числу - PullRequest
50 голосов
/ 01 апреля 2011

Как мне отформатировать 1000000 в 1.000.000 в Python? где '.' является разделителем тысяч после запятой.

Ответы [ 8 ]

102 голосов
/ 01 апреля 2011

Если вы хотите добавить разделитель тысяч, вы можете написать:

>>> '{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'
16 голосов
/ 01 апреля 2011

Я действительно не понял этого; но вот что я понимаю:

Вы хотите конвертировать 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'
11 голосов
/ 25 сентября 2015

Просто немного расширив ответ:)

Мне нужно было иметь тысячный разделитель и ограничивать точность числа с плавающей запятой.

Этого можно достичь, используя следующую строку формата:

> 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

4 голосов
/ 18 ноября 2018

Идея

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

>>> itanum(1000)
'1.000'
1 голос
/ 18 января 2018

Опираясь на ответ Микеля, я реализовал его решение таким образом в своем сюжете matplotlib. Я подумал, что некоторые могут найти это полезным:

ax=plt.gca()
ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, loc: locale.format('%d', x, 1)))
1 голос
/ 05 июля 2016

Использование 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'
0 голосов
/ 17 апреля 2018

Странно, что никто не упомянул простое решение с регулярным выражением:

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.

0 голосов
/ 05 июля 2016

Вот только альтернативный ответ. Вы можете использовать оператор разбиения в Python и через некоторую странную логику Вот код

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
...