Как сохранить точное десятичное число без округления в python - PullRequest
0 голосов
/ 12 июня 2019

У меня есть номер -123456789012345678.879 , который анализируется из файла json и сохраняется в dict.В диктовке это выглядит как -1.23456789012e + 17

Я хочу вернуть исходное полное десятичное число и сохранить его как есть при выводе в файл.

a=-1.23456789012e+17

print(a)

-1.23456789012e+17

Таким образом, чтобы удалить показатели, которые Python форматирует, как я также пытался преобразовать в десятичный из десятичного модуля

Decimal(a)

Decimal(-123456789012345680)

В обоих случаях python меняет точное представление десятичного числа, которое я хочу.Я не хочу никакого округления или изменения моего исходного десятичного числа.

У меня нет возможности форматировать исходное проанализированное значение как строку в данный момент, и мне нужен другой способ преобразования числа экспоненты python обратно воригинальный формат

1 Ответ

0 голосов
/ 12 июня 2019

Я не уверен, что понимаю проблему, но имейте в виду, что Decimal - это просто класс - он не может творить чудеса с передаваемым ему значением. Когда вы теряете точность в числе с плавающей запятой, это происходит до вызова Decimal, поэтому у класса нет возможности восстановить потерянную информацию.

Чтобы избежать этого, класс Decimal также позволяет вам создавать значение из строки. Это позволяет избежать потери точности:

>>> from decimal import Decimal
>>> Decimal('-123456789012345678.929')
Decimal('-123456789012345678.929')
>>> print(Decimal('-123456789012345678.929'))
-123456789012345678.929

Подробнее см. В документации .

...