Как вывести вещественное число в Python: все способы и примеры

Раздел: Встроенные функции -> Вывод числовых значений

Основные техники вывода вещественных чисел

Простейший способ вывести вещественное число в Python - использовать функцию print() с переменной типа float. Она автоматически преобразует число в строку с помощью repr().

pi = 3.141592653589793
print(pi)

Python print float (вывод вещественного числа в python)

3.141592653589793

Python print integer (вывод целого числа в python)

Такой вывод подходит для отладки, но в реальных приложениях часто требуется контролировать количество десятичных знаков, избегать научной нотации или добавлять разделители. Следующие варианты решают эти задачи.

Проблема:

Если число очень мало (1e-10) или очень велико (1e20), Python автоматически использует научную нотацию, что не всегда удобно для чтения. Например: print(0.0000000001) выведет 1e-10.

Как вывести число с заданным количеством десятичных знаков?

Используется f-строка с спецификатором .Nf, где N - число знаков после запятой.

price = 123.456789
print(f"Цена: {price:.2f} руб.")
Цена: 123.46 руб.

Типичная ошибка:

При передаче числа, которое не является float (например, целое), формат .2f также сработает, но результат может быть неожиданным: print(f"{5:.2f}")5.00. Также возможна потеря точности при округлении.

Как использовать метод format для вывода вещественных чисел?

Метод str.format() предоставляет альтернативный способ форматирования, особенно удобный при использовании заполнителей.

value = 3.14159
print("Число: {:.3f}".format(value))
Число: 3.142

Проблема:

При большом количестве аргументов код становится громоздким. Рекомендуется использовать именованные аргументы: print("Pi = {pi:.3f}".format(pi=3.14159)).

Как вывести вещественное число без научной нотации?

Если число слишком велико или мало, возможно принудительно включить фиксированную запись с помощью форматирования .f с достаточным количеством знаков.

small = 1.23e-7
print(f"{small:.10f}")
0.0000001230

Ошибка:

Если число крайне мало (например, 1e-20), задание .20f может привести к выводу нулей из-за ограниченной точности float. В таких случаях лучше использовать Decimal.

Как вывести число в экспоненциальной записи?

Спецификатор .Ne (или .NE) выводит число в научном формате с заглавной/строчной буквой e.

big = 1234567.89
print(f"{big:.2e}")
1.23e+06

Проблема:

По умолчанию Python иногда выбирает научную нотацию автоматически. Чтобы всегда получать фиксированный формат, нужно явно указывать .f с достаточной точностью.

Как добавить разделитель тысяч в целую часть вещественного числа?

В спецификатор добавляется запятая перед точкой. Например, :,.2f выводит число с запятыми как разделителями тысяч.

salary = 1234567.891
print(f"Зарплата: {salary:,.2f} руб.")
Зарплата: 1,234,567.89 руб.

Важно:

Этот символ не зависит от локали - всегда используется запятая. Для локализованного разделителя (например, пробела) потребуется модуль locale.

Как выровнять вещественное число по ширине поля?

Перед точкой указывается общая ширина поля (включая точку и знак). Выравнивание по умолчанию правое.

for val in [3.1, 123.456, 0.0]:
    print(f"|{val:10.3f}|")
|     3.100|
|   123.456|
|     0.000|

Ошибка:

Если ширина меньше необходимой, поле автоматически расширяется. Также возможно выравнивание влево (:<10.3f) или по центру (:^10.3f).

Как использовать старый стиль форматирования с оператором %?

Оператор % с форматной строкой "%.Nf" - унаследованный способ, аналогичный C-функции printf. В Python 3 предпочтительнее f-строки или format().

value = 2.71828
print("%.3f" % value)
2.718

Недостаток:

Отсутствует гибкость именованных аргументов, трудно читать при множестве переменных. Может вызывать путаницу с типами.

Как вывести вещественное число с высокой точностью без ошибок округления?

Для финансовых или научных расчетов, где критична точность, используют тип Decimal из модуля decimal. Он позволяет задать точность (prec) и выводит значение без погрешностей бинарного представления.

from decimal import Decimal, getcontext
getcontext().prec = 6  # общая точность
price = Decimal('19.99')
quantity = Decimal('3')
total = price * quantity
print(f"Итого: {total}")
Итого: 59.97

Проблема:

Decimal работает медленнее встроенного float. Требуется передавать числа строкой, иначе при создании Decimal(0.1) снова появится погрешность.

Как вывести только целую часть вещественного числа?

Можно преобразовать к int() (отбрасывание дробной части) или использовать форматирование .0f (округление до целого).

x = 5.67
print(int(x))       # отбрасывание
print(f"{x:.0f}")   # округление
5
6

Различие:

int() ведёт себя как усечение в сторону нуля, а .0f округляет математически. Для отрицательных чисел: int(-5.7) = -5, f"{-5.7:.0f}" = "-6".

Как вывести число в шестнадцатеричном представлении IEEE 754?

Метод float.hex() возвращает строку с точным двоично-шестнадцатеричным представлением числа. Полезно для отладки точности.

x = 3.14
print(x.hex())
0x1.91eb851eb851fp+1

Применение:

Редко используется в повседневной работе, но незаменимо при анализе ошибок округления или сравнении чисел в разных реализациях.

Расширенные примеры вывода вещественных чисел

Далее приведены нестандартные комбинации форматирования и сценарии, которые часто встречаются на практике.

1. Вывод с принудительным знаком + для положительных чисел

Пример
values = [3.14, -2.71, 0.0]
for v in values:
    print(f"{v:+10.2f}")
     +3.14
     -2.71
     +0.00

Символ + в спецификаторе заставляет выводить знак для положительных чисел. Поле шириной 10 символов выравнивает числа вправо.

3. Заполнение нулями слева (leading zeros)

Пример
number = 42.5
print(f"{number:010.2f}")
0000042.50

Нуль перед шириной поля указывает, что пустые позиции следует заполнять нулями. Общая ширина 10, включая точку и знак.

4. Вывод с разделителем тысяч и одновременным выравниванием

Пример
amount = 1234567.89
print(f"{amount:>20,.2f}")   # выравнивание вправо
print(f"{amount:<20,.2f}")   # выравнивание влево
        1,234,567.89
1,234,567.89        

Символы > и < управляют выравниванием. Запятая перед точкой добавляет разделитель тысяч.

5. Использование Decimal для денежных расчётов с округлением до копеек

Пример
from decimal import Decimal, ROUND_HALF_UP
total = Decimal('123.456')
total = total.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
print(f"Сумма к оплате: {total} руб.")
Сумма к оплате: 123.46 руб.

Метод quantize позволяет округлить Decimal до заданного количества знаков с указанием правила округления.

6. Вывод с использованием локализованного разделителя тысяч

Пример
import locale
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')  # пример для Германии
value = 1234567.89
formatted = locale.format_string("%.2f", value, grouping=True)
print(formatted)
1.234.567,89

Модуль locale подстраивает формат под региональные стандарты (здесь точка разделяет тысячи, запятая - дробную часть).

7. Условный выбор формата в зависимости от величины числа

Пример
def smart_format(num):
    if abs(num) < 0.001 or abs(num) > 1e6:
        return f"{num:.2e}"
    else:
        return f"{num:.4f}"

for val in [0.000123, 12345.6789, 1e15]:
    print(smart_format(val))
1.23e-04
12345.6789
1.00e+15

Функция выбирает экспоненциальную запись для очень малых или больших чисел, и фиксированную - для остальных.

8. Вывод вещественного числа в двоичной системе (нет прямой поддержки, но можно через struct)

Пример
import struct
value = 3.14
# упаковка float в 4 байта и представление каждого байта в двоичном виде
packed = struct.pack('!f', value)
bin_str = ' '.join(f'{b:08b}' for b in packed)
print(f"Двоичное представление float: {bin_str}")
Двоичное представление float: 01000000 01001000 11110101 11000101

Такой вывод полезен для низкоуровневого анализа данных.

9. Форматирование с помощью string.Formatter для сложных шаблонов

Пример
from string import Formatter
fmt = Formatter()
template = "{label}: {value:>10.3f} {unit}"
result = fmt.format(template, label="Температура", value=36.6, unit="°C")
print(result)
Температура:     36.600 °C

Класс Formatter позволяет гибко создавать шаблоны и отделять логику форматирования от вывода.

10. Вывод с подсветкой разрядов (только для демонстрации, через разбиение строки)

Пример
def fancy_float(num, decimals=6):
    formatted = f"{num:.{decimals}f}"
    integer_part, frac_part = formatted.split('.')
    # добавляем пробелы между каждыми тремя цифрами целой части
    groups = []
    for i, ch in enumerate(reversed(integer_part)):
        if i > 0 and i % 3 == 0:
            groups.append(' ')
        groups.append(ch)
    return ''.join(reversed(groups)) + '.' + frac_part

print(fancy_float(123456789.123456, 3))
123 456 789.124

Пример нестандартного форматирования, демонстрирующий, что после получения строки можно выполнить дополнительные манипуляции.

Вывод вещественного числа в Python - comments

En
Python print float (python)