Числа в 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 в следующих случаях.

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

Оставьте первый комментарий

Оставить комментарий

Ваш электронный адрес не будет опубликован.


*