В этой статье вы узнаете о различных числах, используемых в 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 в следующих случаях.
- Когда мы делаем вычисления связанные с финансами, которые нуждаются в точном десятичном представлении.
- Когда мы хотим контролировать требуемый уровень точности.
- Когда мы хотим реализовать понятие значащих десятичных знаков.
- Когда мы хотим, чтобы операции проводились так, как мы делали это в школе.
Оставить комментарий