Python Десятичное число не принимает изменения точности getcontext () - PullRequest
1 голос
/ 22 января 2020

Просто пробуем основы c python Десятичный модуль , и, похоже, он не работает (в блокноте jupyter):

from decimal import *
getcontext().prec = 1

getcontext()

return Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])

Decimal(0.111111)

return Decimal('0.11111100000000000143085543413690174929797649383544921875')

Есть идеи, что происходит?

1 Ответ

1 голос
/ 29 февраля 2020

Похоже, ошибка.

* РЕДАКТИРОВАТЬ: Поведение, кажется, зависит от версии. Наиболее надежный обходной путь должен заключаться в определении десятичной точности в каждой ячейке, в которой вам необходимо ее применить, или в переносе определений точности во внешние модули.

Я выполнил некоторые действия по устранению неполадок, и вот что я нашел *:

  • Если вы только что запустили Jupyter, getcontext().prec = x ведет себя нормально.
  • Если вы используете Run> «Run All Cells», поведение также нормальное.
  • Если вы перезапустите ядро ​​в пользовательском интерфейсе Jupyter, точность сбрасывается до 28 между ручными выполнениями ячеек.

Я сообщил об ошибке в Jupyter - https://github.com/jupyter/notebook/issues/5260

В качестве простого, но некрасивого обходного пути, определение getcontext().prec = 1 в каждой ячейке, к которой вы хотите применить точность, похоже, заставляет Jupyter использовать это.

Или - это довольно странно - выполнение этой команды в любой ячейке появляется установить точность для всего ноутбука после его запуска. Поместите его в верхнюю часть вашего nb, и все будет хорошо:

!jupyter notebook --version

Наконец, импортированные модули должны работать нормально. Если вы go этот маршрут, я мог бы предложить использовать что-то вроде пакета 'nbdev', чтобы упростить процесс создания модулей из записных книжек - это упрощает организацию, чем копирование / вставка из записных книжек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...