Статьи

Учебные материалы по языку Python — от основ до продвинутых тем

float

Страница 21 из 34 · 2026-10-26 · 2 мин чтения

Создание

float соответствует типу double (IEEE 754, 64 бита):

a = 3.14b = 1e-3c = float("2.5")d = float("inf")e = float("-inf")f = float("nan")print(float(3))

Неточность представления

Многие десятичные дроби не представимы в двоичном виде точно:

print(0.1 + 0.2)print(0.1 + 0.2 == 0.3)

Сравнивать числа с плавающей точкой следует с допуском:

import mathprint(math.isclose(0.1 + 0.2, 0.3))print(math.isclose(1.0, 1.001, rel_tol=1e-2))

Специальные значения

import mathinf = float("inf")nan = float("nan")print(inf > 10 ** 100)print(nan == nan)print(math.isnan(nan))print(math.isinf(inf))print(math.isfinite(1.5))

nan не равно даже самому себе, поэтому проверять его нужно через math.isnan.

Методы float

МетодОписание
is_integer()Равно ли число целому
as_integer_ratio()Точная дробь (числитель, знаменатель)
hex()Шестнадцатеричное представление
fromhex(s)Классовый метод: число из hex()
conjugate()Само число
real, imagДействительная и мнимая части
print((2.0).is_integer())print((2.5).is_integer())print((0.75).as_integer_ratio())print((0.1).as_integer_ratio())print((1.5).hex())

Округление

x = 2.675print(round(x))print(round(x, 2))print(round(2.5))print(round(3.5))

round использует банковское округление: половины округляются к ближайшему чётному. Результат round(2.675, 2) равен 2.67 из-за неточного представления числа.

import mathprint(math.floor(-2.5))print(math.ceil(-2.5))print(math.trunc(-2.5))print(int(-2.5))

Результат: -3, -2, -2, -2.

Форматирование

x = 1234.56789print(f"{x:.2f}")print(f"{x:10.3f}")print(f"{x:e}")print(f"{x:,.1f}")print(f"{0.256:.1%}")print(f"{x:g}")

Математические функции

ФункцияОписание
math.sqrt(x)Квадратный корень
math.pow(x, y)Степень, всегда float
math.exp(x), math.log(x, base)Экспонента и логарифм
math.log2(x), math.log10(x)Логарифмы по основаниям 2 и 10
math.sin, math.cos, math.tanТригонометрия, аргумент в радианах
math.atan2(y, x)Угол по координатам
math.degrees, math.radiansПеревод между градусами и радианами
math.hypot(*coords)Евклидова норма
math.fsum(iterable)Точное суммирование
math.pi, math.e, math.tauКонстанты
import mathprint(sum([0.1] * 10))print(math.fsum([0.1] * 10))print(math.hypot(3, 4))

Результат: 0.9999999999999999, 1.0, 5.0.

Предел точности

import sysprint(sys.float_info.max)print(sys.float_info.epsilon)print(sys.float_info.dig)

Для финансовых вычислений используйте decimal.Decimal или fractions.Fraction.

Задания

  1. Напишите функцию сравнения двух чисел с заданной точностью без math.isclose.
  2. Выведите число 1 / 3 с двадцатью знаками и объясните результат.
  3. Просуммируйте 0.1 сто раз обычным способом и через math.fsum, сравните результаты.