Присвояване на научна нотация на променлива в Python

Опитвам се да поискам променлива float, след това да й присвоя нейната научна нотация и след това да използвам тази нотация в следните операции. Както и тук, искам програмата действително да работи с нотацията, а не просто да връща резултатите в нея. Успях да конвертирам променлива с помощта на функцията за печат:

def estim(abs(x)):
    a=print("{:.3e}".format(x))
    return a

Това обаче всъщност не придава научна стойност на x. Тогава опитах

b=float(a)

но a е тип None, така че не работи. Някаква помощ?

Редактиране: под научна нотация имам предвид X.YYYe+Z, пример: 31234.34234 -> 3.12e+04


person L.R.    schedule 29.01.2015    source източник
comment
Е, вашият код няма смисъл. Може би a="{:.3e}".format(x) ще работи?   -  person ForceBru    schedule 29.01.2015
comment
В Python floats не работят вътрешно с помощта на „десетична нотация“ или „научна нотация“. Това са само изходни формати. Какво имате предвид под „работа с нотацията“?   -  person Gandaro    schedule 29.01.2015
comment
Имах предвид, че вместо да разбере 44432.12, програмата ще го приеме като 4.44*10^4, например, така че всъщност 44400. Предложението на @ForceBru изглежда работи, благодаря.   -  person L.R.    schedule 29.01.2015
comment
@L.R. 31234.34234 -> 3.12e+04 ... Имате нужда от a="{:.2e}".format(x), а не от a="{:.3e}".format(x). (Сега не редактирайте)   -  person Bhargav Rao    schedule 29.01.2015
comment
Какво искаш да направиш с този номер? Научната нотация е средство за показване на число. Това не променя какъв е номерът. Така че има смисъл да работите с числото в научна нотация само ако това, което наистина искате, е да работите с низово представяне на него.   -  person BrenBarn    schedule 29.01.2015
comment
Да, не мога да го обясня много добре... Наистина просто се опитвам да закръгля променливата до определен брой значими цифри.   -  person L.R.    schedule 29.01.2015


Отговори (3)


Ако направите "{:.3e}".format(x), ще получите 3 цифри след десетичната запетая, т.е

>>> a = 31234.34234
>>> "{:.3e}".format(a)
'3.123e+04'

За да получите това, което искате, трябва да направите "{:.2e}".format(x).

>>> "{:.2e}".format(a)
'3.12e+04'
>>> float("{:.2e}".format(a))
31200.0

Преобразуването му обратно в float ще ви даде оригиналната стойност

Като функция

def estim(x):
    x = abs(x)
    a=("{:.2e}".format(x))
    print(a)
    return a

Бакшиш:

Можете да използвате % (може да е остарял)

>>> a = 31234.34234
>>> "%e"%a
'3.123434e+04'
person Bhargav Rao    schedule 29.01.2015
comment
Кодът за функцията estim, който сте дали, не работи: „SyntaxError: невалиден синтаксис.“ - person Gandaro; 29.01.2015

Трябва да използвате a="{:.3e}".format(x)

Ето един пример

x=246789;
a="{:.3e}".format(x);
print a;
print float(a);

Изход

2.468e+05
246800.0
person ForceBru    schedule 29.01.2015

Върнатата стойност от печат винаги е None. Подозирам, че това, от което се нуждаете, е по-скоро по линия на:

def estim(x):
    a="{:.3e}".format(abs(x))
    print a
    return a
person Steve Barnes    schedule 29.01.2015