Float в Python: основы и продвинутые примеры

Раздел: Python -> Основы языка Python

Понимание чисел с плавающей точкой в Python

Тип float в Python представляет числа с плавающей точкой двойной точности (64 бита) по стандарту IEEE 754. Эти числа широко используются для научных расчётов, денежных вычислений (с осторожностью), работы с дробными значениями и встроенными функциями. Примеры ниже помогут освоить основные операции и избежать типичных ошибок.

x = 3.14        # литерал
negative = -2.5  # отрицательное
big = 1.23e10    # научная нотация
print(x, negative, big)

что делает strip в python (метод strip() в python)

3.14 -2.5 12300000000.0

математические примеры python (математические примеры в python)

Как создать число float разными способами?

Первый способ – прямая запись с десятичной точкой. Второй – преобразование из целого числа (int) или строки через float().

a = float(42)      # 42.0
b = float("3.1415") # 3.1415
print(a, b)

новые возможности условного оператора python (новые возможности условного оператора в python)

42.0 3.1415

Float python пример (примеры float в python)

Проблема: при передаче в float() некорректной строки (например, "12,5") возникает исключение ValueError. Используйте точку в качестве десятичного разделителя.

Как выполнить основные арифметические операции с float?

С float работают все стандартные операторы: сложение, вычитание, умножение, деление, целочисленное деление, остаток и возведение в степень. Результат обычно тоже float.

a = 10.0
b = 3.0
print(a + b)   # 13.0
print(a - b)   # 7.0
print(a * b)   # 30.0
print(a / b)   # 3.3333333333333335
print(a // b)  # 3.0
print(a % b)   # 1.0
print(a ** b)  # 1000.0

Python кортежи примеры (примеры кортежей в python)

13.0
7.0
30.0
3.3333333333333335
3.0
1.0
1000.0

словарь в python пример (примеры словарей в python)

Проблема точности: деление 10/3 даёт бесконечную дробь, что проявляется в виде 3.3333333333333335. Это не баг, а свойство двоичной арифметики. Для критичных вычислений используйте decimal.Decimal.

Как округлить число float до нужного количества знаков?

Встроенная функция round() позволяет округлить float до указанного числа знаков после запятой. Для банковского округления (по Гауссу) используйте Decimal.

pi = 3.14159265
print(round(pi, 2))  # 3.14
print(round(pi, 4))  # 3.1416
# Форматирование через f-строку
print(f"{pi:.3f}")    # 3.142

является ли число четным python (проверка числа на четность в python)

3.14
3.1416
3.142

типы данных в python с примерами (типы данных в python с примерами)

Ловушка: round() использует банковское округление для равноудалённых значений (например, 2.5 округляется до 2, 3.5 до 4). Для строгого математического округления применяйте Decimal с настройкой контекста.

Как сравнивать числа float, избегая ошибок из-за погрешности?

Прямое сравнение через == может дать неожиданные результаты из-за накопления погрешностей. Рекомендуется использовать math.isclose() или абсолютную/относительную разницу.

import math
a = 0.1 + 0.2
b = 0.3
print(a == b)               # False
print(math.isclose(a, b))   # True
# Собственная проверка
print(abs(a - b) < 1e-9)    # True

множественный выбор python (множественный выбор (if-elif-else) в python)

False
True
True

проверить является ли числом python (проверка, является ли значение числом в python)

Ошибка: использование == для float приводит к ложным отрицаниям. math.isclose() по умолчанию использует относительную и абсолютную погрешности. Настройте параметры rel_tol и abs_tol под задачу.

Как работать со специальными значениями float (inf, nan)?

Python поддерживает бесконечность (inf) и не-число (nan). Они возникают при некоторых операциях и могут быть созданы явно.

import math
x = float('inf')
y = float('-inf')
z = float('nan')
print(x, y, z)
print(math.isinf(x), math.isnan(z))
# Арифметика с inf
print(100 + x)    # inf
print(0 * x)      # nan (неопределённость)
inf -inf nan
True True
inf
nan

Сложность: nan не равно самому себе (z == z даёт False). Для проверки используйте math.isnan(). Бесконечность можно сравнивать, но учтите, что inf - inf даёт nan.

Как преобразовать float в int и строку?

Преобразование в int отбрасывает дробную часть (не округляет). Для округления вниз/вверх используйте math.floor() и math.ceil().

f = 3.76
print(int(f))           # 3
import math
print(math.floor(f))    # 3
print(math.ceil(f))     # 4
print(str(f))           # "3.76"
print(format(f, ".1f")) # "3.8"
3
3
4
3.76
3.8

Ошибка: в некоторых версиях Python округление при преобразовании в строку может зависеть от платформы. Используйте format() или f-строки для контроля вывода.

Расширенные примеры работы с float

Демонстрация погрешности двоичного представления

Пример показывает, почему 0.1 + 0.2 не равно 0.3, и как с помощью Decimal можно получить точный результат.

Пример
from decimal import Decimal, getcontext
# Стандартный float
a = 0.1
b = 0.2
print("float:", a + b, "== 0.3?", a + b == 0.3)
# Decimal с настройкой точности
getcontext().prec = 28
d1 = Decimal('0.1')
d2 = Decimal('0.2')
print("Decimal:", d1 + d2, "== 0.3?", d1 + d2 == Decimal('0.3'))
float: 0.30000000000000004 == 0.3? False
Decimal: 0.3 == 0.3? True

Использование math.isclose() с настраиваемыми допусками

Параметры rel_tol (относительный допуск) и abs_tol (абсолютный допуск) позволяют гибко настраивать сравнение.

Пример
import math
a = 1e-10
b = 2e-10
print("По умолчанию:", math.isclose(a, b))  # False (относительная разница 100%)
print("Абсолютный допуск:", math.isclose(a, b, abs_tol=1e-9))  # True
# Сравнение с нулём
x = 0.0
y = 1e-15
print("С нулём:", math.isclose(x, y, abs_tol=1e-12))  # True
По умолчанию: False
Абсолютный допуск: True
С нулём: True

Форматирование float для вывода с разным стилем

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

Пример
n = 1234567.891234
print(f"Обычный: {n}")
print(f"С фиксированной точкой: {n:.2f}")
print(f"Научный: {n:.2e}")
print(f"Общий: {n:g}")
print(f"С разделителем: {n:,.2f}")
Обычный: 1234567.891234
С фиксированной точкой: 1234567.89
Научный: 1.23e+06
Общий: 1.23457e+06
С разделителем: 1,234,567.89

Работа с бесконечностью и нечислами в статистических данных

Пропуски или деление на ноль могут порождать nan и inf. Пример очистки списка от этих значений.

Пример
import math
data = [1.0, 2.0, float('nan'), 4.0, float('inf'), 5.0]
# Удаление nan и inf
clean = [x for x in data if not math.isnan(x) and not math.isinf(x)]
print("Исходные:", data)
print("Очищенные:", clean)
# Удаление только nan
clean_nan = [x for x in data if not math.isnan(x)]
print("Без nan:", clean_nan)
Исходные: [1.0, 2.0, nan, 4.0, inf, 5.0]
Очищенные: [1.0, 2.0, 4.0, 5.0]
Без nan: [1.0, 2.0, 4.0, inf, 5.0]

Диагностика точности через sys.float_info

Объект sys.float_info показывает пределы и точность float на текущей платформе.

Пример
import sys
info = sys.float_info
print("Максимальное конечное:", info.max)
print("Минимальное положительное нормализованное:", info.min)
print("Машинный эпсилон:", info.epsilon)
print("Количество цифр мантиссы:", info.mant_dig)
Максимальное конечное: 1.7976931348623157e+308
Минимальное положительное нормализованное: 2.2250738585072014e-308
Машинный эпсилон: 2.220446049250313e-16
Количество цифр мантиссы: 53

Бинарное представление float

Функция float.hex() возвращает шестнадцатеричную строку точного представления, а hex() с модулем struct даёт сырые байты.

Пример
n = 3.14
print("hex():", n.hex())
import struct
packed = struct.pack('!d', n)
print("Байты (big-endian):", packed.hex())
hex(): 0x1.91eb851eb851fp+1
Байты (big-endian): 40091eb851eb851f

Примеры float в Python - comments

En
Float python пример (python)