Возможный дубликат:
Как печатать число с запятыми в качестве разделителей тысяч?
Например:
>> print numberFormat(1234)
>> 1,234
Или есть ли встроенная в Python функция?
Возможный дубликат:
Как печатать число с запятыми в качестве разделителей тысяч?
Например:
>> print numberFormat(1234)
>> 1,234
Или есть ли встроенная в Python функция?
Никто до сих пор не упомянул новую опцию ','
, которая была добавлена в версии 2.7 на мини-язык спецификации формата - см. PEP 378: Формат Specifier для Thousands Separator в Что нового в документе Python 2.7. Он прост в использовании, потому что вам не нужно возиться с locale
(но он ограничен для интернационализации из-за этого, см. оригинальный PEP 378). Он работает с float, ints и decimals - и всеми другими функциями форматирования, предусмотренными в спецификации на мини-языке.
Использование образца:
print format(1234, ",d") # -> 1,234
print "{:,d}".format(1234) # -> 1,234
Примечание.. Хотя эта новая функция определенно удобна, на самом деле не так сложно использовать модуль locale
, как предложили некоторые другие. Преимущество состоит в том, что тогда числовой вывод может быть сделан автоматически, чтобы автоматически следовать соответствующим тысячам (и другим) соглашениям разделителя, используемым в разных странах при выводе таких вещей, как числа, даты и время. Также очень легко установить настройки по умолчанию с вашего компьютера, не изучая кучу языков и кодов стран. Все, что вам нужно сделать, это:
import locale
locale.setlocale(locale.LC_ALL, '') # empty string for platform default settings
После этого вы можете просто использовать общий код типа 'n'
для вывода чисел (как целое число, так и float). Где я, запятые используются как разделитель тысяч, поэтому после установки языка, как показано выше, это произойдет:
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()
. Однако спецификатор 'd'
влияет, если вместо этого вы используете locale.format()
или locale.format_string()
.
Не забудьте сначала установить локаль.
Отключен от webpy 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)