Как мне отформатировать 1000000
до 1.000.000
в Python? где '.' это разделитель тысяч десятичных знаков.
Добавьте разделители тысяч десятичных знаков в число
Ответ 1
Если вы хотите добавить разделитель тысяч, вы можете написать:
>>> '{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()
заключается в том, что он будет использовать ваш разделитель тысяч locale, например.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'de_DE.utf-8')
'de_DE.utf-8'
>>> locale.format('%d', 1000000, 1)
'1.000.000'
Ответ 2
Я действительно не понял этого; но вот что я понимаю:
Вы хотите конвертировать 1123000 в 1 123 000. Вы можете сделать это, используя формат:
Пример:
>>> format(1123000,',d')
'1,123,000'
Ответ 3
Просто добавим немного ответа здесь:)
Мне нужно было иметь тысячный разделитель и ограничивать точность числа с плавающей запятой.
Это может быть достигнуто с помощью следующей строки формата:
> my_float = 123456789.123456789
> "{:0,.2f}".format(my_float)
'123,456,789.12'
Здесь описывается мини-язык format()
-specifier:
[[fill]align][sign][#][0][width][,][.precision][type]
Источник: https://www.python.org/dev/peps/pep-0378/#current-version-of-the-mini-language
Ответ 4
Использование 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
Опираясь на ответ Микеля, я реализовал его решение, подобное этому, в моем графике matplotlib. Я подумал, что некоторым может показаться полезным:
ax=plt.gca()
ax.get_xaxis().set_major_formatter(matplotlib.ticker.FuncFormatter(lambda x, loc: locale.format('%d', x, 1)))
Ответ 6
Вот только альтернативный ответ. Вы можете использовать оператор split в 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
Ответ 7
Странно, что никто не упомянул о простом решении с регулярным выражением:
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
регулярное выражение использует lookahead для проверки того, что количество цифр после заданной позиции делится на 3.