Как мне заставить Python, чтобы сохранить целое из научной нотации


Я пытаюсь написать метод в Python 3.2, который шифрует фразу, а затем расшифровывает ее. Проблема в том, что числа настолько велики, что когда Python делает математику с ними, он немедленно преобразует ее в научную нотацию. Поскольку мой код требует, чтобы все числа функционировали в научной нотации, это бесполезно.

То, что у меня есть:

coded = ((eval(input(':'))+1213633288469888484)/2)+1042

В основном, я просто получаю число от пользователя и делаю некоторые вычисления.

Я пробовал format() и еще кое-что, но я не знаю, как это сделать. не могу заставить их работать.

EDIT: я использую только четные целые числа.

2 3

2 ответа:

В python3, '/' делает реальное деление (например, с плавающей точкой). Чтобы получить целочисленное деление, нужно использовать //. Другими словами 100/2 дает 50.0 (float), тогда как 100//2 дает 50 (integer)

Ваш код, вероятно, нужно изменить следующим образом:

coded = ((eval(input(':'))+1213633288469888484)//2)+1042

В качестве предостережения тем не менее, вы, возможно, захотите рассмотреть вопрос об использовании int вместо eval:

coded = ((int(input(':'))+1213633288469888484)//2)+1042

Если вы знаете, что значение с плавающей запятой на самом деле является целым числом, или вам не нужно отбрасывать дробную часть, вы можете просто преобразовать ее в int перед печатью.

>>> print 1.2e16
1.2e+16
>>> print int(1.2e16)
12000000000000000