- Разделитель тысяч в формате Python с пробелами
- Вариант A
- Вариант B
- Вариант C
- Добавление пробелов между разрядами числа, денежный формат. Decimal
- Как разбить число на разряды
- Ответы (5 шт):
- Форматирование чисел в Python
- Форматирование чисел с округлением
- Вывод числа с разбивкой на разряды
- Вывод числа в процентах
- Заключение
- 1 комментарий к “Форматирование чисел в Python”
Разделитель тысяч в формате Python с пробелами
Вместо этого вам нужно будет использовать формат номера ‘n’ для локали, а установить локаль, чтобы использовать пространство в качестве разделителя тысяч. Да, это больно.
‘n’ — Номер. Это то же самое, что и ‘d’ , за исключением того, что он использует текущую настройку локали для вставки соответствующих символов разделителя номера.
@Vanuan: Какую версию Python вы используете? Я проверил это с 2,6 и 2,7; 2.5 и старше не имеют str.format() .
@Vanuan: Или вы используете форматирование строки % ? Этот тип форматирования строк не поддерживает n в одной версии Python.
Ответа на вопрос @user136036 неплохо, но, к сожалению, он не учитывает реальность ошибок Python. Полный ответ может быть следующим:
Вариант A
Если язык вашей платформы работает правильно, просто используйте язык:
import locale locale.setlocale(locale.LC_ALL, '') print("".format(7123001))
Результат зависит от правильности вашей локали и реализации Python.
Но что делать, если форматирование Python в соответствии с локалью нарушено, например. Python 3.5 в Linux?
Вариант B
Если Python не учитывает параметр grouping=True , вы можете использовать локаль и обходное решение (используйте денежный формат):
locale.setlocale(locale.LC_ALL, '') locale._override_localeconv = print(locale.format('%.2f', 12345.678, grouping=True, monetary=True))
Выше дает 12.345,68 на моей платформе. Настройка денежного значения на False или его отсутствие — Python не группирует тысячи. Указание locale._override_localeconv = ничего не делает.
Вариант C
Если у вас нет времени, чтобы проверить, что работает нормально и что с Python на вашей платформе, вы можете просто использовать регулярную функцию замены строки (если вы хотите поменять запятые и точки на точки и запятую):
print(«<. 2f>«.format(7123001.345).replace(«,», «X»).replace(«.», «,»).replace(«X», «.»))
Замена запятой для пространства тривиальна (точка считается десятичным разделителем):
Добавление пробелов между разрядами числа, денежный формат. Decimal
У меня в табличке сейчас сумма показана в формате «768768768.00». Мне нужно отображать числа с пробелами между разрядов. Число Decimal. Можете помочь?
1 2 3 4 5 6 7 8 9 10 11 12 13
def displayData ( self, I ) : if I.column() == 5 : return unicode( self[I.row()].summa ) return QtCore.QVariant( self[I.row()][I.column()] ) def textAlignmentRole ( self, I ) : if I.column() == 5 : return QtCore.QVariant ( QtCore.Qt.AlignRight + QtCore.Qt.AlignVCenter ) return QtCore.QVariant ( None ) def data ( self, I, role ) : if role == QtCore.Qt.DisplayRole : return self.displayData( I ) elif role == QtCore.Qt.TextAlignmentRole : return self.textAlignmentRole( I ) else : return QtCore.QVariant( None )
Добавлено через 1 час 46 минут
Нашла PEP Index > PEP 378 — Format Specifier for Thousands Separator
Вот только не применю никак. Буду разбираться.
Преоброзование числа в денежный формат
У меня есть число, например 1529674,43 как мне его преобразовать в след вид: 1 529 674,43 или.
Преобразование числа в денежный формат (Си++)
Только начал изучать язык Си++ и пока что не очень понимаю его. Помогите разобраться. Заранее.
Денежный формат целого числа
Доброго времени суток. Столкнулся с простой задачкой, но тем не менее самостоятельно решить не.
Преевод числа в денежный формат
Разработайте программу, которая преобразует введенное с клавиатуры дробное число в денежный формат.
>>> import decimal >>> n = decimal.Decimal('768768768.00') >>> ''.format(n).replace(',', ' ') '768 768 768.00' >>>
>>> import decimal >>> n = decimal.Decimal('768768768.0000000000') >>> ''.format(n).replace(',', ' ') '768 768 768.0000000000' >>>
Да нет.. У меня же чисел бесконечное множество и берутся они из базы данных.. Это я пример формата одного из сумм показала..
Сообщение от lucher
Эх. И да и нет. Как с конкретным числом поступить понимаю, а как с данными из БД — нет. Что-то пытаюсь делать, не работает. Сегодня мне объяснят, конечно, что с этим делать, но это значит, что домашку я снова не сделала. ))
Добавлено через 56 минут
Нашла еще кое-что полезное в docs python org
9.4. decimal — Decimal fixed point and floating point arithmetic
.
9.4.7. Recipes¶
Here are a few recipes that serve as utility functions and that demonstrate ways to work with the Decimal class:
1 2 3 4 5 6 7 8 9 10 11 12
def moneyfmt(value, places=2, curr='', sep=',', dp='.', pos='', neg='-', trailneg=''): """Convert Decimal to a money formatted string. places: required number of places after the decimal point curr: optional currency symbol before the sign (may be blank) sep: optional grouping separator (comma, period, space, or blank) dp: decimal point indicator (comma or period) only specify as blank when places is zero pos: optional sign for positive numbers: '+', space or blank neg: optional sign for negative numbers: '-', '(', space or blank trailneg:optional trailing minus indicator: '-', ')', space or blank
Добавлено через 6 часов 14 минут
if I.column() == 5 : return u''.format( self[I.row()].summa ).replace(u',', u' ')
Как разбить число на разряды
Есть число 1234567 .
Как разбить пробелами число по разрядам, чтобы получилось 1 234 567 ?
Ответы (5 шт):
x = 1234567 ''.format(x).replace(',', ' ') >>> '1 234 567'
Если хочется сгруппировать тысячи в числе в соответствии с текущей локалью пользователя:
>>> import locale >>> locale.setlocale(locale.LC_ALL, '') 'ru_RU.UTF-8' >>> print(locale.format('%d', 1234567, grouping=True)) 1 234 567
В другой локали, разделитель может быть другим:
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') 'en_US.UTF-8' >>> print(locale.format('%d', 1234567, grouping=True)) 1,234,567
Имена локалей и доступная функциональность могут зависеть от системы.
так можно любую маску сделать по количеству разрядов
import re def numberjump_filter(string): string=str(string) #s = re.match("(\d)(\d)(\d)",string) s = re.match("(.*)(\d\d\d)(\d\d\d\d)",string) return s[1]+" "+s[2]+" "+s[3]
Ещё вариант для разнообразия:
n = str(1234567)[::-1] print(' '.join(n[i:i+3] for i in range(0, len(n), 3))[::-1])
- делаем из числа строку
- переворачиваем её
- отрезаем по три символа
- объединяем их через пробелы
- ещё раз переворачиваем то, что получилось
Разбиваем на разряды, при этом используем f-string:
x = 1234567890 print(f" руб.".replace("_", " "))
Разумеется, надо учитывать, будут ли в тексте ещё символы _ , которые могут быть заменены на пробелы. В этом случае лучше вынести f-string в отдельную переменную и использовать её в коде.
x = 1234567890 fstring = f" руб.".replace("_", " ") print(f"Итого: \n Напишите сумму прописью: ________________")
Форматирование чисел в Python
Форматирование строк на самом деле является удивительно большой темой, и у Python есть собственный внутренний мини-язык для обработки множества доступных нам параметров форматирования. В этой статье мы разберем только форматирование чисел. Вы узнаете, как вывести число с нужным количеством знаков после запятой и с разбивкой по три цифры.
Форматирование чисел с округлением
Сначала давайте рассмотрим форматирование чисел с плавающей запятой до заданного уровня округления. Есть два способа сделать это: можно указать нужное количество значащих цифр в целом или количество значащих цифр после десятичной точки. Начнем с первого.
Чтобы указать уровень точности округления, нам нужно использовать двоеточие (:), за которым следует десятичная точка, а также некоторое целое число, представляющее степень точности (количество знаков после запятой). При использовании f-строки мы помещаем всё это после значения, которое хотим отформатировать (в фигурных скобках) . Вместо этого также можно использовать метод format.
x = 4863.4343091 # пример числа с плавающей запятой print(f"") # использование f-строки print("".format(x)) # использование метода format
В обоих случаях мы получаем одинаковый результат: 4863.43.
Как видите, наше довольно длинное число сократилось до шести цифр. Также следует отметить, что данная операция форматирования может производить еще и округление. Если, например, первоначальное число будет иметь значение 4863.435, то выведем в консоль мы 4863.44. Здесь используется округление до ближайшего четного числа (в английском языке banker’s rounding — «округление банкира»).
Если мы укажем меньше цифр, чем у нас есть в целочисленной части нашего числа с плавающей запятой, то получим экспоненциальное представление:
x = 4863.4343091 print(f"") # 4.86e+03
4.86e+03 означает 4,86 x 10³, или 4,86 x 1000, что равно 4860. Глядя на этот результат, мы видим, что получили три значащих цифры, как и хотели.
Итак, а как нам указать три десятичных знака после запятой? Для этого нужно просто добавить f .
x = 4863.4343091 print(f"") # 4863.434
f в данном случае указывает, что наше число типа float должно отображаться как «число с фиксированной точкой». То есть нам нужно определенное количество десятичных знаков. Мы также можем использовать f без числа, что по умолчанию означает точность 6 цифр после точки:
x = 4863.4343091 print(f"") # 4863.434309
Вывод числа с разбивкой на разряды
Большие числа зачастую удобно писать с использованием символов-разделителей (обычно это запятые, пробелы или точки). Это улучшает их восприятие при чтении. В Python мы можем указать, каким символом разбить цифры числа на классы, указав нужный символ после двоеточия:
x = 1000000 print(f"") # 1,000,000 print(f"") # 1_000_000
При форматировании чисел с плавающей запятой и форматировании с округлением это тоже работает:
x = 4863.4343091 print(f"") # 4,863.434 print(f"") # 4_863.434
Вывод числа в процентах
Мы можем вывести число в качестве процентного значения, просто добавив символ % в конце параметров форматирования вместо f :
questions = 30 correct_answers = 23 print(f"You got correct!") # You got 76.67% correct!
При форматировании числа в процентах точность округления всегда относится к количеству цифр после точки.
Заключение
Вот и все! Мы разобрали самые ходовые способы вывода чисел в нужном формате. Теперь вы знаете, как ограничить количество цифр в выводимом числе, количество знаков в дробной части числа, как вывести число в удобном для чтения виде и в виде процентного значения.