Числа в Python

Числа в Python

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

Числовой тип данных в Python

Python поддерживает целые числа, числа с плавающей точкой (так же называемые числами с плавающей запятой) и комплексные числа. Они определены как int, float и комплексный класс в Python.

Целые числа и числа с плавающей точкой разделены наличием или отсутствием десятичной точки. 5 — целое число, тогда как 5.0 — число с плавающей точкой.

Комплексные числа записываются в виде x + yj, где x — действительная часть, а y — мнимая часть.

Мы можем использовать функцию type(), чтобы узнать, какому классу принадлежит переменная или значение, и функцию isinstance(), чтобы проверить, принадлежит ли она определенному классу.

a = 5

# результат: <class 'int'>
print(type(a))

# результат: <class 'float'>
print(type(5.0))

# результат: (8+3j)
c = 5 + 3j
print(c + 3)

# результат: True
print(isinstance(c, complex))

Хотя целые числа могут быть любой длины, число с плавающей запятой является точным только до 15 десятичных знаков (16-е место — неточно).

Числа, с которыми мы имеем дело каждый день, — это десятичная система счисления. Но программистам часто приходится работать с двоичными, шестнадцатеричными и восьмеричными системами счисления.

В Python мы можем представить эти числа, поместив префикс перед этим числом. Ниже перечислены эти префиксы.

  • Двоичный «0b» или «0B»
  • Восьмеричный ‘0o’ или ‘0O’
  • Шестнадцатеричный ‘0x’ или ‘0X’
  • # результат: 107
    print(0b1101011)
    
    # результат: 253 (251 + 2)
    print(0xFB + 0b10)
    
    # результат: 13
    print(0o15)

    Приведение типа числа в Python

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

    Операции, такие как сложение, вычитание приводят к неявному (автоматически) целочисленному типу float, если один из операндов является float.

    >>> 1 + 2.0
    3.0

    Выше мы видим, что 1 (целое число) приведено к 1.0 (с плавающей запятой) для сложения, и результатом также является число с плавающей запятой.

    Мы также можем использовать встроенные функции, такие как int(), float() и complex() для явного преобразования между типами.

    >>> int(2.3)
    2
    >>> int(-2.8)
    -2
    >>> float(5)
    5.0
    >>> complex('3+5j')
    (3+5j)

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

    Десятичные дроби в Python

    Встроенный в Python класс float выполняет некоторые вычисления, которые могут нас удивить. Мы все знаем, что сумма 1.1 и 2.2 равна 3.3, но Python, похоже, не согласен.

    >>> (1.1 + 2.2) == 3.3
    False

    Оказывается, что числа с плавающей запятой реализованы в Python как двоичные дроби, поскольку компьютер понимает только двоичную систему счисления (0 и 1). По этой причине большинство известных нам десятичных дробей не может быть точно сохранено на нашем компьютере.

    Давайте рассмотрим пример. Мы не можем представить дробь 1/3 как десятичное число. Это даст 0.33333333.

    Получается, что десятичная дробь 0,1 приведет к бесконечно длинной двоичной дроби 0,000110011001100110011 … и наш компьютер хранит только ее конечное число.

    Это будет только приблизительно 0,1, но никогда не будет равным 0,1. Следовательно, это ограничение нашего компьютерного оборудования, а не ошибка в Python.

    >>> 1.1 + 2.2
    3.3000000000000003

    Чтобы преодолеть эту проблему, мы можем использовать десятичный модуль decimal, который поставляется с Python. В то время как числа с плавающей запятой имеют точность до 15 десятичных знаков, десятичный модуль имеет заданную пользователем точность.

    import decimal
    
    # Результат: 0.1
    print(0.1)
    
    # Результат: Decimal('0.1000000000000000055511151231257827021181583404541015625')
    print(decimal.Decimal(0.1))

    Этот модуль используется, когда мы хотим выполнить десятичные вычисления с высокой точностью.

    Когда использовать модуль decimal вместо float?

    Обычно мы используем модуль decimal в следующих случаях.

  • Когда мы делаем вычисления связанные с финансами, которые нуждаются в точном десятичном представлении.
  • Когда мы хотим контролировать требуемый уровень точности.
  • Когда мы хотим реализовать понятие значащих десятичных знаков.
  • Когда мы хотим, чтобы операции проводились так, как мы делали это в школе.
  • Источник

    Просмотров:

    Добавить комментарий

    Adblock
    detector