Я прочитал документацию Decimal и исследовал другие методы подавления выражения научной нотации в Python, но у меня проблема с тем, что пакет Decimal не работает должным образом, и я не могу понять, как получить желаемый результат .
У меня есть строка - my_tick = "0.0000005"
type(my_tick)
<class 'str'>
Когда я передаю это в Decimal (), объект форматируется и возвращается в научной нотации:
from decimal import *
formatted_tick = Decimal(my_tick)
print(formatted_tick)
5E-7
Если я позвоню getcontext()
, я увижу, что моя точность по умолчанию установлена в 28 десятичных разрядов:
getcontext()
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[InvalidOperation, FloatOperation], traps=[InvalidOperation, DivisionByZero, Overflow])
Я пытался обернуть строку как число с плавающей точкой, но она все еще возвращается в научной записи:
formatted_tick = Decimal(repr(float(my_tick)))
print(formatted_tick)
5E-7
Оба результата дают десятичный объект со значением 5E-7
Для моей функции он должен оставаться десятичным объектом со значением 0.0000005
, что касается форматирования, у меня может быть такая же проблема с другими числами, и я не обязательно заранее знаю точность, поэтому нативный необходимо решение, которое может обрабатывать точность от 1 до 10 десятичных знаков самостоятельно. Кто-нибудь знает, почему Decimal использует научную запись, когда точность установлена на 28?
Спасибо заранее,