Типы int и float: целые и вещественные числа в Python

Раздел: Типы данных -> Составные типы данных

Основы работы с целыми числами и числами с плавающей точкой

В Python числовые типы int (целое число) и float (число с плавающей точкой) являются фундаментальными для любых вычислений. Они поддерживают все стандартные арифметические операции: сложение, вычитание, умножение, деление, целочисленное деление, остаток от деления, возведение в степень. При смешивании типов результат автоматически приводится к float, если хотя бы один из операндов является вещественным.

a = 10          # int
b = 3.5         # float
c = a + b       # 13.5 (float)
d = a // b      # 2.0 (float, целочисленное деление)

Int float python тип (типы int и float в python)

Целые числа в Python не имеют ограничения по размеру (кроме доступной памяти), что позволяет работать со сколь угодно большими значениями. Числа с плавающей точкой реализованы по стандарту IEEE 754 и имеют конечную точность (обычно 53 бита мантиссы).

Типичная ошибка: потеря точности при сравнении float. Например, 0.1 + 0.2 == 0.3 вернёт False. Для сравнения вещественных чисел следует использовать math.isclose().

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

Функции int() и float() принимают строку и возвращают число. Если строка не соответствует числовому формату, возникает исключение ValueError. Безопасный способ - использовать обработку исключений.

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

print(safe_to_int("123"))   # 123
print(safe_to_int("12.3"))  # None

При преобразовании строки с пробелами или знаками валюты int() и float() не сработают. Требуется предварительная очистка: .replace('$', '').strip().

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

Встроенная функция round() округляет число. Синтаксис: round(number, ndigits). Если ndigits не указан, округляется до целого. Важно: round() использует банковское округление (round half to even), что может давать неожиданные результаты.

print(round(2.5))  # 2 (половина округляется к чётному)
print(round(3.5))  # 4
print(round(2.675, 2))  # 2.67 (из-за ошибки представления)

Для фиксированного округления вверх или вниз применяются math.ceil() и math.floor(). Для точного десятичного округления удобнее модуль decimal.

Как проверить, является ли число целым или вещественным?

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

x = 5.0
print(isinstance(x, (int, float)))  # True
print(x.is_integer())               # True

is_integer() не работает с int, только с float. Для универсальной проверки: isinstance(x, int) or (isinstance(x, float) and x.is_integer()).

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

Оператор ** возводит в степень. Для квадратного корня используется math.sqrt() или возведение в степень 0.5.

print(2 ** 10)          # 1024
print(9 ** 0.5)         # 3.0
import math
print(math.sqrt(16))    # 4.0

Возведение в степень больших чисел может потребовать много памяти. Для целых чисел результат может быть очень большим, но Python справляется.

Расширенные примеры работы с int и float

Целочисленные методы и свойства

Целые числа имеют несколько полезных методов:

Пример
num = 255
print(num.bit_length())          # 8 (количество бит для представления)
print(num.bit_count())           # 8 (количество единичных бит, Python 3.8+)
print(num.to_bytes(2, 'big'))    # b'\x00\xff'
8
8
b'\x00\xff'

Метод to_bytes() преобразует целое число в байтовую строку заданной длины. Обратное преобразование - int.from_bytes().

Пример
b = b'\x01\x02'
val = int.from_bytes(b, 'big')
print(val)  # 258
258

Методы чисел с плавающей точкой

Тип float также предоставляет ряд методов, связанных с внутренним представлением:

Пример
f = 6.5
print(f.as_integer_ratio())        # (13, 2)  - числитель и знаменатель
print(f.is_integer())              # False
print(f.hex())                     # '0x1.a000000000000p+2'  - шестнадцатеричное представление
(13, 2)
False
0x1.a000000000000p+2

Шестнадцатеричное представление полезно для точного обмена данными без потерь при сериализации.

Проблемы точности float и способы их решения

Внутреннее двоичное представление многих десятичных дробей неточно. Это приводит к накоплению ошибок при вычислениях.

Пример
a = 0.1 + 0.2
print(a)               # 0.30000000000000004
print(a == 0.3)        # False
print(0.1 * 3)         # 0.30000000000000004

Для сравнения чисел используется math.isclose() или относительная/абсолютная погрешность.

Пример
import math
print(math.isclose(0.1 + 0.2, 0.3))  # True
True

Если требуется строгая десятичная точность (деньги, налоги), применяется модуль decimal.

Пример
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
print(a + b)          # 0.3
print((a + b) == Decimal('0.3'))  # True
0.3
True

Работа с огромными целыми числами

Python автоматически расширяет разрядность int.

Пример
big = 10**100
print(big)
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Можно выполнять арифметические операции с такими числами без переполнения, но время выполнения растет.

Пример
a = 2 ** 1000
b = a // 123456
print(len(str(b)))  # 302 символа
302

Битовые операции над целыми

Целые числа поддерживают побитовые операции (&, |, ^, ~, <<, >>), что полезно для флагов, масок и низкоуровневого программирования.

Пример
mask = 0b1100
flag = 0b1010
print(bin(mask & flag))   # 0b1000
print(bin(mask | flag))   # 0b1110
0b1000
0b1110

Преобразование между системами счисления

Для перевода целого числа в двоичную, восьмеричную, шестнадцатеричную строку служат встроенные функции bin(), oct(), hex(). Обратные преобразования - int() с указанием основания.

Пример
print(bin(42))          # 0b101010
print(oct(42))          # 0o52
print(hex(42))          # 0x2a
print(int('101010', 2)) # 42
0b101010
0o52
0x2a
42

Использование fractions для рациональных чисел

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

Пример
from fractions import Fraction
f1 = Fraction(1, 3)
f2 = Fraction(2, 3)
print(f1 + f2)          # 1
1

Результатом является дробь, которая при необходимости может быть преобразована в float.

Пример
print(float(Fraction(22, 7)))  # 3.142857142857143
3.142857142857143

Типы int и float в Python - comments

En
Int float python тип (python)