0

Какой модуль, какие функции и.т.п. использовать, чтобы сделать 1.5-1.3 и получить 0.2? Ах да, потом еще и сохранить 0.2 так, чтобы потом оно не стало каким-нибудь 0.1999999998?
(Получить от пользователя ввод числа 1, числа 2 и сделать их вычисления?)

Почитал интернет, я правильно понял, что мне нужно переводить хранение всех чисел в строки, и дальше как то так?:

from decimal import Decimal as D

a = str(1.5) b = str(1.3) print(D(a) - D(b)) # выводит 0.2, ура!

Gh0sTG0
  • 808
  • 2
    https://docs.python.org/3/library/fractions.html – MBo Sep 25 '23 at 10:47
  • Добавьте метку [поиск-библиотек] – Глеб Sep 25 '23 at 10:48
  • 1
    А чем не подходит модуль decimal, который вы у себя в коде успешно применяете? – insolor Sep 25 '23 at 10:55
  • @MBo А 0.2 то как получить? – Gh0sTG0 Sep 25 '23 at 10:57
  • 1
    "Почитал интернет, я правильно понял, что мне нужно переводить хранение всех чисел в строки, и дальше как то так?:" - не в строки, а в объекты Decimal, ну и лучше сразу строковыми литералами инициализировать a = "1.5", b = "1.3", чтобы нигде периодическая двоичная дробь не закралась. – insolor Sep 25 '23 at 10:58
  • @insolor Да, в общем то, все не так плохо... И я уже как бы смирился, что сейчас пойду искать все места, где может быть дробь, и перегонять это в строки... Но вообще неприятно, да... Такая... подлянка от питона... – Gh0sTG0 Sep 25 '23 at 11:02
  • @insolor а в mysql этот decimal запихать можно? Если нет, значит в строки... – Gh0sTG0 Sep 25 '23 at 11:03
  • 1
    Это не подлянка от питона, это в принципе особенность чисел с плавающей точкой, см.: https://ru.stackoverflow.com/a/417454/1365. В MySQL вроде бы есть decimal тип. – insolor Sep 25 '23 at 11:04
  • 1
    А вообще, если у вас не предполагается точность результата больше одной цифры после запятой, можно просто округлять результаты операций до одного знака. И можно это делать только при выводе, что вообще правильным форматированием вывода решается. Для многих практических задач такого подхода будет вполне достаточно (но не для денежных задач). – insolor Sep 25 '23 at 11:15
  • @insolor спасибо, буду думать. – Gh0sTG0 Sep 25 '23 at 11:22

0 Answers0