Как оценить строку и сохранить точность в Python - PullRequest
0 голосов
/ 04 октября 2019

Я пытаюсь получить более точный результат из этого кода:

a = str(10**20+10**-20)
b = eval(a)

Я хочу получить около 42 десятичных знаков, чтобы Python не округлял его до 1e + 20.

Ответы [ 2 ]

0 голосов
/ 04 октября 2019

Вам на самом деле «только» нужно 41, чтобы выполнить это. Используйте модуль decimal:

import decimal
decimal.getcontext().prec=41
a = 10**20+10**decimal.Decimal(-20)

Типы Python с плавающей точкой так же неточны, как и в любом другом языке. Модуль decimal содержит структуру данных Decimal, способную обрабатывать произвольно длинные десятичные числа. Вы можете прочитать больше об этом здесь: проверить это .

0 голосов
/ 04 октября 2019

Попробуйте это. Я использовал этот онлайн-компилятор и получил его для компиляции и возврата правильных десятичных знаков.

    pi = 3.1415926
    precision = 42
    print( "{:.{}f}".format( pi, precision ) )

Взгляните на эту статью .

Еще одно замечание: немного больше, кажется, что многие ненужные конечные нули (например, 10+) приводят к неверным результатам ... например, 10 ** - 20 вернет правильное число с точностью до 20до 36. После 36 значения становятся равными. 000 000 000 000 000 000 009 999 и т. д. Поэтому, если по какой-то причине вы хотите вернуть эти конечные нули, вам может потребоваться реализовать способ обработки этих конечных нулей.

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