Python: задачки и вопросы
Развёрнутое пояснение:
1. В строке from decimal import Decimal импортируется тип Decimal.
2. Выражение Decimal('0.1') + Decimal('0.2') выполняет точное десятичное сложение и даёт Decimal('0.3').
3. Сравнение a == 0.3 сравнивает Decimal с float. Python преобразует float 0.3 в Decimal через его двоичное приближение, которое не равно Decimal('0.3'), поэтому результат False.
4. Сравнение a == Decimal('0.3') сравнивает два одинаковых Decimal, поэтому True.
5. float(a) превращает Decimal('0.3') в float 0.3, и сравнение с литералом 0.3 даёт True.
6. Итоговый вывод: False True True.
Почему это важно: В финансовых расчётах и работе с ценами часто используют Decimal, чтобы избежать ошибок float. Но при смешивании Decimal и float в сравнениях, сортировках или условиях результат может оказаться неожиданным: равенство может быть ложным, а max или min может выбрать не тот элемент. Правильно — приводить оба операнда к Decimal или к float явно и не полагаться на неявное преобразование.
2. Выражение Decimal('0.1') + Decimal('0.2') выполняет точное десятичное сложение и даёт Decimal('0.3').
3. Сравнение a == 0.3 сравнивает Decimal с float. Python преобразует float 0.3 в Decimal через его двоичное приближение, которое не равно Decimal('0.3'), поэтому результат False.
4. Сравнение a == Decimal('0.3') сравнивает два одинаковых Decimal, поэтому True.
5. float(a) превращает Decimal('0.3') в float 0.3, и сравнение с литералом 0.3 даёт True.
6. Итоговый вывод: False True True.
Почему это важно: В финансовых расчётах и работе с ценами часто используют Decimal, чтобы избежать ошибок float. Но при смешивании Decimal и float в сравнениях, сортировках или условиях результат может оказаться неожиданным: равенство может быть ложным, а max или min может выбрать не тот элемент. Правильно — приводить оба операнда к Decimal или к float явно и не полагаться на неявное преобразование.
✍2