- How to display a float with two decimal places?
- 13 Answers 13
- Форматирование чисел в Python
- Форматирование чисел с округлением
- Вывод числа с разбивкой на разряды
- Вывод числа в процентах
- Заключение
- 1 комментарий к “Форматирование чисел в Python”
- Как вывести число с полной точностью?
- 3 ответа 3
- Похожие
- Подписаться на ленту
- Число с фиксированной точностью
- 4 ответа 4
How to display a float with two decimal places?
I have a function taking float arguments (generally integers or decimals with one significant digit), and I need to output the values in a string with two decimal places (5 → 5.00, 5.5 → 5.50, etc). How can I do this in Python?
13 Answers 13
Since this post might be here for a while, lets also point out python 3 syntax:
You could use the string formatting operator for that:
The result of the operator is a string, so you can store it in a variable, print etc.
@alper: If the end goal was a float , you’d skip the intermediate string and just do round(myfloat, 2) ; float(‘%.2f’ % 5.0) it completely pointless (the string adds a zero, then parsing back to float discards it (because float has no concept of additional trailing zeroes).
This was new in Python 3.6 — the string is placed in quotation marks as usual, prepended with f’. in the same way you would r’. for a raw string. Then you place whatever you want to put within your string, variables, numbers, inside braces f’some string text with a or within that text’ — and Python evaluates as with previous string formatting methods, except that this method is much more readable.
>>> foobar = 3.141592 >>> print(f'My number is - look at the nice rounding!') My number is 3.14 - look at the nice rounding!
You can see in this example we format with decimal places in similar fashion to previous string formatting methods.
NB foobar can be an number, variable, or even an expression eg f» .
Going forward, with new code I prefer f-strings over common %s or str.format() methods as f-strings can be far more readable, and are often much faster.
Форматирование чисел в 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!
При форматировании числа в процентах точность округления всегда относится к количеству цифр после точки.
Заключение
Вот и все! Мы разобрали самые ходовые способы вывода чисел в нужном формате. Теперь вы знаете, как ограничить количество цифр в выводимом числе, количество знаков в дробной части числа, как вывести число в удобном для чтения виде и в виде процентного значения.
1 комментарий к “Форматирование чисел в Python”
Как вывести число с полной точностью?
Читаю учебник Лутча по Питону 2011-го года издания и в нём описана такая ситуация: Проблема в том, что когда я эти операции ввожу у себя, то при обоих способах число выводится в форме str. Как полностью отобразить число?
3 ответа 3
Видимо, слова Лутца устарели.
Как видно — repr работает по другому.
Однако суть вещей не изменилась и можна вывести «правду» при помощи форматирования вывода, как показано выше
Ну и я тоже докину вариант) Можно использовать встроенные модуль decimal , с помощью которого можно осуществлять вычисления с очень большой «точностью»
from decimal import Decimal x = Decimal(3.1415 * 2) print(x) # 6.28300000000000036237679523765109479427337646484375 # можно преобразовать к строке и "обрезать" до нужной длины print(Decimal(str(x)[:18])) # 6.2830000000000003
Основной плюс Decimal в том, что он десятичный (как и следует из названия), а не двоичный, и всех этих . 0003623767. (артефактов округления до ближайшей двоичной дроби) вообще не будет при правильном использовании Decimal(‘3.1415’) * 2
a = 3.1415 * 2 n = 16 // количество знаков после запятой template = '' print(template.format(a))
Похожие
Подписаться на ленту
Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.
Дизайн сайта / логотип © 2023 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2023.7.25.43544
Нажимая «Принять все файлы cookie» вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.
Число с фиксированной точностью
Надо вывести число a типа float на экран c точностью не менее n знаков после запятой.
Python 3, без использования библиотек.
4 ответа 4
n = 5 a = 1.2345678912345 template = '' print(template.format(a))
Альтернативно еще есть функция format (а не метод для строк): format(2.123456789, «.5f») . Возможные аргументы для форматирования описаны по адресу https://docs.python.org/3/library/string.html#formatspec
Решение приемлемо, однако надо получить ответ с точностью НЕ МЕНЕЕ n цифр после запятой. Поэтому убирать лишние знаки после запятой необязательно — чем точнее тем лучше:)
А тогда не понятно, чем ограничивать вывод. Ведь из-за двоичного представления никто не гарантирует, что после последнего введенного числа после запятой будут одни нули. Например, в том же примере можете поменять n на 25, и посмотреть на результат.
@Jenyay,1)По поводу 25, ну так это у вас ошибка)) хотите сказать, что 1.234566678912345 не равно 1.234567891234500000000000? 2)Как это чем ограничивать вывод? Есть конечное рациональное число типа float. Если количество знаков после запятой больше n, просто выведите a.
@Sithell: сейчас уже поздно (это существующие ответы делает неверными), но слова «чем точнее тем лучше» следует в вопросе помещать. Сейчас ваш вопрос читается что вы хотите 2 в 2.000.. превратить ( 0 повторен n раз). Если вам нужен точный результат, то просто repr(a) вызовите (это не фиксированный формат). Формально, так как n не менее n цифр.