Как изменить повышенную степень экспоненты в Python?

Я пытаюсь получить значение с веб-страницы в научной нотации 3.67E+17, а затем преобразовать его в форму 0.367E+18. Или, если экспоненциальное представление равно 0.367E+18, получить именно это значение. Мне удалось реализовать часть, в которой я открываю веб-страницу, а затем нахожу, где находится это научное число, однако мне не удалось преобразовать само число в нужную мне форму.

Я получил это далеко, хотя:

lsF = "3.18E+20"
int(lsF[lsF.find("E")+2:]) - 18

Я смог выяснить, сколько знаков после запятой мне нужно сдвинуть влево или вправо, однако, как мне их на самом деле сдвинуть?


person Always Learning Forever    schedule 15.08.2017    source источник
comment
Добавьте 1 к показателю степени и разделите мантиссу на 10.   -  person Barmar    schedule 15.08.2017
comment
Почему вы добавляете 2 на позицию E? Вы должны просто добавить 1, так как вам нужны + или -, чтобы знать, является ли это положительной или отрицательной экспонентой.   -  person Barmar    schedule 15.08.2017
comment
@JohnColeman Позволяет ли format() контролировать количество цифр до десятичной точки при использовании экспоненциальной записи?   -  person Barmar    schedule 15.08.2017
comment
@JohnColeman Как бы вы напрямую получили доступ к показателю степени из числа с плавающей запятой?   -  person Barmar    schedule 15.08.2017
comment
Это двоичная мантисса и показатель степени, он хочет десятичные.   -  person Barmar    schedule 15.08.2017
comment
@JohnColeman Я не хочу отображать это, но на самом деле использую значение в дальнейших расчетах.   -  person Always Learning Forever    schedule 15.08.2017
comment
@AkshatTripathi Если вы не хотите его отображать, зачем вам формат? Просто преобразуйте его в число с плавающей запятой и используйте его так.   -  person Barmar    schedule 15.08.2017
comment
Итак, я передам значение другому программному обеспечению, которое ожидает, что значение будет в степени 18. И я не могу изменить значение числа, умножив его или разделив на 10.   -  person Always Learning Forever    schedule 15.08.2017
comment
Я никогда не слышал о таком программном обеспечении. Эти полномочия используются только для ввода и вывода для людей, внутренне компьютеры представляют числа в двоичном формате с плавающей запятой. Это звучит как проблема XY.   -  person Barmar    schedule 15.08.2017
comment
Итак, если бы исходный номер был 3.1E10, вам понадобился бы 0.000000031E18?   -  person Barmar    schedule 15.08.2017
comment
Да, это именно то, что мне нужно   -  person Always Learning Forever    schedule 15.08.2017
comment
Ответ Бармара хорош и прост. Если вам нужна поддержка библиотеки, есть Decimal и, в частности, Decimal.as_tuple для разложения значения.   -  person robert_x44    schedule 15.08.2017


Ответы (1)


lsF = "3.18E+20"
ePos = lsF.find("E")
if (ePos):
    mantissa = float(lsF[:ePos])
    exponent = int(lsF[ePos+1:])
else:
    mantissa = float(lsF)
    exponent = 0
shift = 18 - exponent
result = mantissa / 10**shift

result будет новая мантисса для показателя степени 18

person Barmar    schedule 15.08.2017