Практическое руководство по преобразованию значений в тип float

Раздел: Типы данных -> Работа с числами с плавающей точкой

Преобразование в тип float

Основной и наиболее распространённый способ преобразования значения в число с плавающей точкой в Python - использование встроенной функции float(). Она принимает один аргумент: число (целое, дробное) или строку, представляющую число.

# Преобразование целого числа
a = float(10)
print(a)  # 10.0

преобразовать в float python (преобразование в float в python)

10.0

Python 2 float (float в python 2)

# Преобразование строки с десятичной точкой
b = float("3.14159")
print(b)  # 3.14159
3.14159
# Преобразование строки с научной нотацией
c = float("2.5e-3")
print(c)  # 0.0025
0.0025

Возможные проблемы:

  • ValueError - если строка не может быть интерпретирована как число с плавающей точкой (например, "abc", "12,34" с запятой). Решение - предварительная проверка или обработка исключений.
  • OverflowError - при передаче числа, выходящего за диапазон float (в современных версиях Python скорее вернётся inf). Рекомендуется использовать модуль decimal для особых случаев.
try:
    val = float("не число")
except ValueError:
    val = 0.0

Цели использования: преобразование данных из пользовательского ввода, чтение чисел из текстовых файлов, работа с данными, полученными из API.

Как преобразовать число с плавающей точкой из строки, где разделитель - запятая?

В некоторых региональных форматах десятичная часть отделяется запятой. Прямой вызов float("3,14") вызовет ошибку. Решение - заменить запятую на точку.

s = "3,14"
val = float(s.replace(",", "."))
print(val)  # 3.14

Проблема: если строка содержит разделители тысяч (например, "1.234,56"), замена всех запятых может привести к неверному результату. Тогда лучше использовать locale.atof.

Как выполнить точные финансовые расчёты без погрешностей float?

Тип float имеет ограниченную точность (около 15–17 значащих цифр). Для денежных вычислений рекомендуется модуль decimal.

from decimal import Decimal, getcontext
getcontext().prec = 28
d = Decimal('0.1') + Decimal('0.2')
print(d)  # 0.3
print(float(d))  # 0.3

При преобразовании Decimal во float может снова возникнуть потеря точности. Поэтому для финального представления часто используют округление.

Как преобразовать сразу список строк в числа с плавающей точкой?

Для массового преобразования применяется генератор списка или функция map.

str_list = ["1.5", "2.7", "3.14"]
float_list = [float(x) for x in str_list]
print(float_list)  # [1.5, 2.7, 3.14]

Если среди строк есть нечисловые, возникнет ошибка. Можно обернуть преобразование в функцию с обработкой исключений.

def safe_float(s):
    try:
        return float(s)
    except ValueError:
        return None

mixed = ["1.5", "abc", "2.0"]
result = [safe_float(x) for x in mixed]
print(result)  # [1.5, None, 2.0]

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

Модуль locale предоставляет функцию atof для преобразования строк, учитывающую текущую локаль.

import locale
locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
s = "1.234,56"
val = locale.atof(s)
print(val)  # 1234.56

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

Расширенные примеры преобразования в float

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

Преобразование шестнадцатеричных чисел с плавающей точкой

Python 3.1+ поддерживает строки в формате шестнадцатеричной записи IEEE 754.

Пример
hex_str = "0x1.921fb54442d18p+1"  # число π с точностью double
val = float.fromhex(hex_str)
print(val)  # 3.141592653589793
print(val.hex())  # обратное преобразование
3.141592653589793
0x1.921fb54442d18p+1

Преобразование с использованием map и lambda для обработки ошибок

Фильтрация некорректных значений.

Пример
data = ["10.5", "", "3.14", "abc", "2.0"]
cleaned = list(map(lambda x: float(x) if x.replace('.','',1).isdigit() else None, data))
print(cleaned)  # [10.5, None, 3.14, None, 2.0]
[10.5, None, 3.14, None, 2.0]

Проверка isdigit работает только для чисел без знака. Для полной проверки лучше использовать регулярные выражения или блок try/except.

Преобразование массивов с помощью NumPy

Библиотека NumPy обеспечивает эффективное преобразование больших массивов данных.

Пример
import numpy as np
string_array = np.array(["1.1", "2.2", "3.3"])
float_array = string_array.astype(np.float64)
print(float_array)  # [1.1 2.2 3.3]
print(float_array.dtype)  # float64
[1.1 2.2 3.3]
float64

При ошибке в одном элементе NumPy вызовет ValueError. Для обработки можно использовать np.genfromtxt с параметром dtype=None.

Преобразование с использованием Fraction для рациональных чисел

Модуль fractions позволяет преобразовывать строки вида "3/4" в float.

Пример
from fractions import Fraction
frac = Fraction("3/4")
val = float(frac)
print(val)  # 0.75
0.75

Преобразование строк с унарными операторами

Функция float не поддерживает конвертацию строк вида "+3.14" или "-5.5"? На самом деле поддерживает.

Пример
print(float("+3.14"))  # 3.14
print(float("-5.5"))   # -5.5
3.14
-5.5

Но строка "++3.14" вызовет ошибку.

Преобразование с обработкой бесконечности и NaN

Python распознаёт строки "inf", "-inf", "infinity", "nan" (без учёта регистра).

Пример
for s in ["inf", "-inf", "infinity", "nan", "NaN"]:
    print(f"float('{s}') = {float(s)}")
float('inf') = inf
float('-inf') = -inf
float('infinity') = inf
float('nan') = nan
float('NaN') = nan

Преобразование с округлением после конвертации

Иногда требуется получить не точное значение float, а округлённое до определённого числа знаков.

Пример
raw = "3.141592653589793"
val = round(float(raw), 3)
print(val)  # 3.142
3.142

Округление может привести к дополнительной погрешности, поэтому его применяют только для вывода.

Преобразование с помощью eval (не рекомендуется)

Функция eval может вычислить строку как Python-выражение, но она опасна из-за возможности выполнения произвольного кода.

Пример
# eval("3.14") -> 3.14
# eval("1+2") -> 3 (но это не float)
# Лучше использовать float() или Decimal.

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

Преобразование в float в Python - comments

En
преобразовать в float python (python)