округление микро питона

Я не могу освоить округление в микропитоне

a=round(86.86, 1)
print (a)
86.90001

наверняка должен быть способ ограничиться одним dp и заставить его округлиться?


person Kris Mclean    schedule 18.02.2019    source источник
comment
Возможный дубликат Python 3 Float Decimal Points/Precision   -  person Carcigenicate    schedule 18.02.2019
comment
Вам нужно будет отформатировать его как строку. По-видимому, это число не может быть точно представлено с помощью поплавков.   -  person Carcigenicate    schedule 18.02.2019
comment
Я не понимаю, почему микро-питон (где печать (86.9) дает 86,900001) и питон (где печать 86,9 дает 86,9) настолько разные в этом отношении   -  person Kris Mclean    schedule 18.02.2019
comment
Это может быть связано с используемыми типами чисел с плавающей запятой. Micropython может использовать числа с плавающей запятой, тогда как Python использует числа с двойной точностью (просто предположение).   -  person Carcigenicate    schedule 18.02.2019
comment
Обработка чисел с плавающей запятой в MicroPython зависит от конкретной реализации. Некоторые версии (например, WiPy 1.0) даже не поддерживают числа с плавающей запятой! Единственная точная ссылка, которую я могу легко найти, это это, но из на форуме кажется очевидным, что большинство реализаций MicroPython используют 32-битное число с плавающей запятой одинарной точности.   -  person nekomatic    schedule 18.02.2019
comment
Поэтому я обычно обхожу проблемы с точностью с помощью команды round cmd. Но когда round(86.86, 1) возвращает 86.900001, похоже, нет механизма ограничения количества десятичных знаков?   -  person Kris Mclean    schedule 19.02.2019
comment
Механизм ограничения количества знаков после запятой заключается в форматировании числа в строку, например. '{:.1f}'.format(round(86.86, 1)). Просто невозможно хранить некоторые числа точно в двоичном формате с плавающей запятой, так же как невозможно точно хранить 1/7 в десятичном формате. Точно такая же проблема существует и в настольном Python, просто вы не замечаете ее так часто, потому что настольный Python использует более высокую внутреннюю точность.   -  person nekomatic    schedule 19.02.2019
comment
См. docs.python.org/3.6/tutorial/floatingpoint.html. #tut-fp-issues подробнее...   -  person nekomatic    schedule 19.02.2019