Python преобразование с потерями из числа с плавающей точкой в ​​int - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь найти способ написать 21 * (10 ^ 21) в Python. Я пробовал два подхода. Первый просто делает следующее:

>>> print(21*(10**21))
21000000000000000000000

Это работает просто отлично. Однако проблема, которую я пытаюсь решить, требует от меня итерации к этому числу, то есть путем наращивания от 1 * (10 ^ 1) до 21 * (10 ^ 21). Поэтому я попробовал следующее:

>>> temp = 20*(10**20)
>>> print(21*temp*10/20)
2.1e+22

Теперь я хочу, чтобы отображалось все число, а не в форме 'e', ​​поэтому я преобразовал его в int. Но это печатает неправильный ответ:

>>> print(int(21*temp*10/20))
20999999999999997902848

Я знаю, что целые числа не имеют ограничения в Python 3 (что я и использую), так что это сбивает меня с толку. Я думал, что это может быть потому, что часть /20 вызывает преобразование в float, но число 21*(10^21) находится в пределах float, поэтому преобразование обратно в int не должно быть проблемой.

Я попытался найти эту ошибку в сети, но безуспешно. Любая помощь будет оценена.

...