Числа с плавающей точкой в Python: синтаксис и примеры
Основы работы с типом float в Python
Как преобразовать строку или число в число с плавающей точкой?
Самый распространённый способ получить значение типа float - вызвать встроенную функцию float(). Она принимает один аргумент и возвращает вещественное число.
Пример 1: преобразование целого числа.
x = float(5)
print(x)
print(type(x))вещественные значения python (вещественные значения в python)
5.0 <class 'float'>
вывести тип данных python (вывод типа данных в python)
Пример 2: преобразование строки, содержащей число.
y = float('3.14')
print(y)
Python двоичные данные (работа с двоичными данными в python)
3.14
переменная int python какая переменная (переменная int в python - что это?)
Пример 3: специальные значения.
inf = float('inf')
nan = float('nan')
print(inf, nan)комплексные числа в python (комплексные числа в python)
inf nan
логические значения python (логические значения в python)
Типичная ошибка: передача строки с недопустимыми символами. Например, float('3,14') вызывает ValueError. Решение: заменить запятую на точку. Также float('abc') вызывает ту же ошибку.
Типичная ошибка: передача None или неподходящего типа (список, словарь) - возникает TypeError.
Как получить float при делении?
Оператор / всегда возвращает float, даже если оба операнда целые.
result = 10 / 3
print(result)
print(type(result))длина переменной python (длина числа и переменной в python)
3.3333333333333335 <class 'float'>
определение объекта python (определение типа объекта в python)
Типичная ошибка: путаница с целочисленным делением // (возвращает int если оба операнда int). Если нужен вещественный результат, используйте /.
Какие особенности арифметики с float?
Числа с плавающей точкой имеют ограниченную точность из-за двоичного представления. Это приводит к неожиданным результатам.
print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3)определение типа данных python (определение типов данных в python)
0.30000000000000004 False
Python максимальное целое число (максимальное целое число в python)
Решение для точных финансовых расчётов: использовать модуль decimal (см. следующий вариант).
Типичная ошибка: сравнение на равенство двух float через ==. Лучше использовать math.isclose() или задавать допуск.
Как избежать ошибок округления с float?
Модуль decimal обеспечивает точное десятичное представление с настраиваемой точностью.
from decimal import Decimal, getcontext
getcontext().prec = 4
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b)
print(a + b == Decimal('0.3'))List values python (список значений словаря в python)
0.3 True
числа с плавающей запятой python (числа с плавающей запятой в python)
Важно: аргумент Decimal должен быть строкой, иначе возможны неожиданности.
Типичная ошибка: передача числа 0.1 напрямую - Decimal(0.1) создаст число с погрешностью. Всегда используйте строки.
Как преобразовать другие типы в float?
Функция float() также работает с булевыми значениями и числами.
print(float(True)) # 1.0
print(float(False)) # 0.0
print(float(10)) # 10.0является ли числом python (проверка, является ли значение числом в python)
1.0 0.0 10.0
Python пустые значения (пустые значения в python)
Типичная ошибка: попытка преобразовать строку с пробелами - float(' 3.14 ') работает, но float('3.14 kg') вызовет ValueError.
Как правильно сравнивать float?
Из-за погрешностей прямое сравнение на равенство ненадёжно. Используйте math.isclose с допуском.
import math
print(math.isclose(0.1 + 0.2, 0.3))
print(math.isclose(0.1 + 0.2, 0.3, rel_tol=1e-9))оператор float python (оператор float в python)
True True
тип данных словарь python (словарь (dict) в python)
Для сравнения с нулём задают abs_tol.
print(math.isclose(0.0, 1e-12, abs_tol=1e-10))строковые значения python (строковые значения в python)
False
Типичная ошибка: использование == для float. Это может привести к необнаруженным багам.
Расширенные примеры работы с float в Python:
# Научная нотация
x = float('1.5e-3')
print(x) # 0.0015
# Округление с помощью round
price = 19.995
print(round(price, 2)) # 20.0 (банковское округление может дать 19.99)
# Форматирование через f-строки
value = 123.456789
print(f'{value:.2f}') # 123.46
print(f'{value:.10f}') # 123.4567890000
# Использование math.floor и math.ceil
import math
print(math.floor(3.7)) # 3
print(math.ceil(3.2)) # 4
# Преобразование из строки с научной нотацией
s = '2.99792458e8'
speed_of_light = float(s)
print(speed_of_light) # 299792458.0
# Float в условных выражениях
if 0.0:
print('True')
else:
print('False') # False, так как 0.0 считается ложным
# Бесконечность и NaN в арифметике
import math
inf = float('inf')
nan = float('nan')
print(inf + 1) # inf
print(inf - inf) # nan
print(math.isnan(nan)) # True
print(math.isinf(inf)) # True
# Производительность: float быстрее decimal для больших объёмов
# (но менее точен)
# Ошибка при сравнении с NaN: NaN не равен самому себе
print(nan == nan) # False
# Использование numpy для массивов float (если установлен)
# import numpy as np
# arr = np.array([1.0, 2.0, 3.0])
# print(arr.dtype) # float64