Как получить вещественное число из различных типов в Python
Раздел: Основы Python -> Преобразование в числовые типы
Преобразование в float: основные способы
float(x) - встроенная функция, преобразующая объект x в число с плавающей точкой. Поддерживает строки и числа.
float('3.14') # 3.14
float(5) # 5.0
float(' -1.23e-4 ') # -0.000123перевести в float python (преобразование в float в python)
Возможные ошибки: ValueError при некорректной строке, TypeError для неподдерживаемых типов (например, список).
Как преобразовать строку с запятой вместо точки?
Замена запятой на точку перед вызовом float:
s = '3,14'
float(s.replace(',', '.')) # 3.14
Проблема: если строка уже содержит точку, замена не повредит, но может превратить '1,2.3' в '1.2.3' (ошибка). Лучше проверять.
Как безопасно преобразовать с обработкой ошибок?
Использование try/except:
def safe_float(value):
try:
return float(value)
except (ValueError, TypeError):
return None
Типичная ошибка: забыть обработать TypeError при передаче None или списка.
Как преобразовать целое число или булево значение?
float работает напрямую:
float(True) # 1.0
float(False) # 0.0
float(42) # 42.0
Как использовать Decimal для точных финансовых расчетов с преобразованием?
Сначала создаём Decimal, затем преобразуем в float:
from decimal import Decimal
d = Decimal('0.1')
f = float(d) # 0.1 (с потерей точности)
Decimal обеспечивает точность, но float не может её сохранить. Для точных вычислений оставляйте Decimal.
Как преобразовать строку с учётом локали (разделитель тысяч)?
Использование locale.atof:
import locale
locale.setlocale(locale.LC_ALL, 'ru_RU.UTF-8')
locale.atof('1 234,56') # 1234.56
Требует установленной локали. На Windows возможны сложности.
Как преобразовать список строк в список float?
Применяем list comprehension или map:
strings = ['1.5', '2.7', '3.14']
floats = [float(s) for s in strings] # [1.5, 2.7, 3.14]
# или
floats = list(map(float, strings))
Часто встречающиеся проблемы:
- Попытка преобразовать пустую строку: float('') -> ValueError
- Строка с пробелами и табуляциями: float(' 1.5 ') корректно, но float('1,5') - ошибка.
- Некорректные символы: float('12a') -> ValueError
- Специальные значения: float('nan'), float('inf'), float('-inf') допустимы.
- Преобразование None: TypeError, а не ValueError.
Расширенные примеры преобразования в float
Ниже приведены нестандартные ситуации и способы их обработки.
Пример 1: Преобразование строки с научной нотацией
Пример
float('1.23e-4') # 0.000123
float('1E2') # 100.0
float('1.5e+2') # 150.0
Результат: 0.000123, 100.0, 150.0
Пример 2: Преобразование из типа Fraction (дробь)
Пример
from fractions import Fraction
f = Fraction(3, 4)
float(f) # 0.75
0.75
Пример 3: Преобразование из Decimal с контролем точности
Пример
from decimal import Decimal, getcontext
getcontext().prec = 4
d = Decimal('1.234567')
f = float(d) # 1.234567 (Decimal не округляет, float теряет точность)
1.234567
Пример 4: Использование ast.literal_eval для безопасного парсинга
Пример
import ast
def parse_float(s):
try:
return ast.literal_eval(s)
except (ValueError, SyntaxError):
return None
parse_float('1.5') # 1.5
parse_float('1,5') # None (ошибка)
1.5, None
Пример 5: Преобразование строки с несколькими точками (ошибка)
Пример
float('1.2.3') # ValueError: could not convert string to float: '1.2.3'
Traceback (most recent call last): ... ValueError: could not convert string to float: '1.2.3'
Пример 6: Преобразование булевых значений
Пример
float(True) # 1.0
float(False) # 0.0
float(1==1) # 1.0
float(1==2) # 0.0
1.0, 0.0, 1.0, 0.0
Пример 7: Преобразование строки с ведущими нулями
Пример
float('00123.45') # 123.45
float('0.0') # 0.0
float('0') # 0.0
123.45, 0.0, 0.0
Пример 8: Преобразование строки со знаком плюс и минус
Пример
float('+1.5') # 1.5
float('-2.0') # -2.0
float('--3.0') # ValueError
1.5, -2.0, ValueError
Пример 9: Применение map ко многим строкам
Пример
data = ['1.1', '2.2', '3.3', 'не число']
floats = []
for s in data:
try:
floats.append(float(s))
except ValueError:
floats.append(None)
print(floats) # [1.1, 2.2, 3.3, None]
[1.1, 2.2, 3.3, None]
Пример 10: Преобразование строки с пробелами и табуляциями
Пример
float(' \t 3.14 ') # 3.14 (пробелы игнорируются)
3.14
Пример 11: Проверка на специальные значения
Пример
float('inf') # inf
float('-Inf') # -inf
float('NaN') # nan
import math
math.isnan(float('NaN')) # True
inf, -inf, nan, True
Пример 12: Использование регулярных выражений для валидации
Пример
import re
def is_float(s):
pattern = r'^[+-]?(\d+\.?\d*|\d*\.?\d+)([eE][+-]?\d+)?$'
return bool(re.match(pattern, s.strip()))
print(is_float('3.14')) # True
print(is_float('.5')) # True
print(is_float('1.')) # True
print(is_float('1.2.3')) # False
True, True, True, False
преобразование в float в Python - comments
En
перевести в float python (python)