Преобразование данных в числовой формат в Python

Раздел: Типы данных -> Преобразование типов данных

Приведение данных к числовым типам в Python

Основной способ: встроенные функции int(), float() и complex()

Для преобразования значения в целое число используется int(x), для числа с плавающей точкой - float(x), для комплексного - complex(x). Эти функции принимают один аргумент (число, строку или другой объект) и возвращают соответствующий числовой тип. Если преобразование невозможно, возникает исключение ValueError.

# Целое число из строки
print(int('42'))        # 42

# Число с плавающей точкой из строки
print(float('3.14'))    # 3.14

# Комплексное число из строки
print(complex('1+2j'))  # (1+2j)

вывод float python (вывод числа float в python)

Типичные проблемы:

  • Попытка преобразовать строку с дробной точкой через int() - ValueError.
  • Пробелы в начале/конце строки - int() и float() игнорируют их, но если пробелы внутри, возникает ошибка.
  • Логические значения True/False преобразуются в 1 и 0 соответственно.

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

Если нужно получить целую часть числа, представленного строкой с дробной частью, сначала применяют float(), затем int().

s = '3.14'
result = int(float(s))
print(result)  # 3

Tuple в dict python (преобразование кортежа в словарь в python)

Ошибка: если строка содержит буквы или нечисловые символы, float() вызовет ValueError.

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

Функция int() принимает второй необязательный аргумент base (основание от 2 до 36). Строка может содержать префикс (0b, 0o, 0x).

print(int('1010', 2))    # 10
print(int('0b1010', 0))  # 10 (base=0 определяет основание по префиксу)
print(int('FF', 16))     # 255

Python привести к числу (приведение к числовому типу в python)

Ошибка: если строка не соответствует указанному основанию - ValueError.

Как безопасно преобразовать строку с обработкой ошибок?

Для надёжного преобразования используют конструкцию try/except, перехватывая ValueError.

def safe_int(s):
    try:
        return int(s)
    except ValueError:
        return None

print(safe_int('123'))   # 123
print(safe_int('abc'))   # None

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

Как преобразовать логическое значение в число?

Python позволяет напрямую привести bool к int: True → 1, False → 0.

print(int(True))   # 1
print(int(False))  # 0

Также можно использовать в арифметических операциях: True + 1 даст 2.

Ошибки нет, но следует помнить, что булевы значения являются подклассом int.

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

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

import math

print(int(3.9))        # 3 (отбрасывание)
print(round(3.9))      # 4
print(math.floor(3.9)) # 3
print(math.ceil(3.9))  # 4

Особенность: round() использует банковское округление (to nearest even) для равных расстояний.

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

Применяют функцию map() или генератор списка.

str_list = ['1', '2', '3']
int_list = list(map(int, str_list))
print(int_list)  # [1, 2, 3]

# С дробными числами
float_list = [float(x) for x in ['1.5', '2.7', '3.0']]
print(float_list)  # [1.5, 2.7, 3.0]

Проблема: если в списке есть некорректные строки, map вызовет ошибку. Лучше использовать try внутри генератора.

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

Функция complex() принимает два аргумента (действительную и мнимую части) или одну строку.

print(complex(3, 4))        # (3+4j)
print(complex('5+6j'))      # (5+6j)
print(complex('3+4j'))      # (3+4j)

Ошибка: строка должна быть без пробелов и в формате 'a+bj' или 'a-bj'.

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

Если важна точность десятичных дробей, применяют Decimal из модуля decimal.

from decimal import Decimal, InvalidOperation

try:
    d = Decimal('0.1') + Decimal('0.2')
    print(d)  # 0.3
    print(float(d))  # 0.3
except InvalidOperation:
    print('Некорректная строка')

Особенность: Decimal чувствителен к количеству знаков и может потребовать настройки контекста.

Примеры приведения к числовым типам

Преобразование строкового представления числа

Пример
# Шестнадцатеричная строка
s = '1a'
result = int(s, 16)
print(result)  # 26
26
Пример
# Двоичная строка с префиксом
s = '0b1101'
result = int(s, 0)
print(result)  # 13
13

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

Пример
val = 7.999
print(int(val))          # 7
print(round(val))        # 8
print(int(val + 0.5))    # 8 (простое округление)
7
8
8

Преобразование логических и None значений

Пример
print(int(None))  # Ошибка TypeError
TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
Пример
# Использование or для замещения
x = None
val = int(x) if x is not None else 0
print(val)  # 0
0

Преобразование списка с обработкой ошибок

Пример
strings = ['123', 'abc', '45.6', '78']
numbers = []
for s in strings:
    try:
        numbers.append(int(float(s)))
    except (ValueError, TypeError):
        numbers.append(None)
print(numbers)  # [123, None, 45, 78] (обратите внимание: 45.6 -> int(float()) = 45)
[123, None, 45, 78]

Преобразование из bytes

Пример
b = b'255'
print(int(b))          # 255
print(float(b))        # 255.0

# Двоичные данные
b2 = b'0b1111'
print(int(b2, 0))      # 15
255
255.0
15

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

Пример
from fractions import Fraction

frac = Fraction('3/4')
print(float(frac))  # 0.75
print(int(frac))    # 0 (отбрасывание дробной части)
0.75
0

Преобразование с помощью decimal.Decimal с округлением

Пример
from decimal import Decimal, ROUND_HALF_UP

d = Decimal('2.675')
d_rounded = d.quantize(Decimal('0.01'), rounding=ROUND_HALF_UP)
print(d_rounded)    # 2.68  (в отличие от float round: 2.67)
2.68

Работа с комплексными числами из двух компонентов

Пример
real_part = 3
imag_part = -2
c = complex(real_part, imag_part)
print(c)                    # (3-2j)
print(c.real)               # 3.0
print(c.imag)               # -2.0
print(int(c.real))          # 3
(3-2j)
3.0
-2.0
3

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

Пример
s = '  -456  '
print(int(s))        # -456 (пробелы игнорируются, знак распознаётся)
s2 = ' +3.14 '
print(float(s2))     # 3.14
-456
3.14
Пример
# Пробел внутри числа недопустим
s3 = '12 34'
try:
    print(int(s3))
except ValueError as e:
    print('Ошибка:', e)
Ошибка: invalid literal for int() with base 10: '12 34'

Приведение к числу для пользовательского ввода

Пример
user_input = input('Введите число: ')
try:
    number = float(user_input)
except ValueError:
    print('Неверный ввод')
else:
    print('Введено число:', number)
(Пример: ввод '10.5' -> 10.5; ввод 'abc' -> Неверный ввод)

Приведение к числовому типу в Python - comments

En
Python привести к числу (python)