В моей программе десятичная точность очень важна.
Многие мои вычисления должны быть точными для многих знаков после запятой (например, 50).
Поскольку я использую python, я использую десятичный модуль
(с контекстом(). prec = 99. ie. Установите, чтобы иметь 99 знаков после запятой при создании экземпляра десятичного объекта)
поскольку питонические поплавки не позволяют приблизить такую точность.
Поскольку я хочу, чтобы Пользователь указывал десятичные точки точности вычислений, мне пришлось реализовать несколько функций round() в моем коде.
К несчастью, встроенная функция раунда и десятичный объект плохо взаимодействуют.
round(decimal.Decimal('2.000000000000000000001'),50)
# Number is 1e-21. There are 21 decimal places, much less than 50.
Однако результат 2.0 вместо 2.000000000000000000001
Круговая функция не округляется до 50. Гораздо меньше!
Да, я убедился, что переопределения не происходит при создании объекта Decimal, но после вызова раунда.
Я всегда передаю строки, представляющие поплавки, в конструктор Decimal, никогда не pythonic плавает.
Почему круглая функция делает это со мной?
(Я понимаю, что он, вероятно, был первоначально разработан для pythonic float, который никогда не может иметь столько десятичных знаков, но в документации утверждается, что объект Decimal идеально интегрируется в код python и совместим со встроенными функциями python!)
Спасибо, спасибо!
(Это меня раздражает, так как эта проблема подрывает использование всей программы)
Технические характеристики:
python 2.7.1
Windows 7
десятичный модуль (встроенный)