преобразовать экспоненциальную в десятичную в python

У меня есть массив в python, который содержит набор значений, некоторые из них

2.32313e+07

2.1155e+07

1.923e+07

11856

112.32

Как преобразовать экспоненциальные форматы в десятичный формат

Дополнительно: есть ли способ преобразовать показатель степени непосредственно в десятичный при печати в UNIX с помощью awk?


person randomThought    schedule 15.10.2009    source источник
comment
вы хотите преобразовать в строку, представляющую число с плавающей запятой с определенной точностью?   -  person SilentGhost    schedule 15.10.2009
comment
да. И точность может быть любой   -  person randomThought    schedule 15.10.2009
comment
что означает любое число? ты знаешь этот номер?   -  person SilentGhost    schedule 15.10.2009
comment
число будет зависеть от типа файла, из которого я извлекаю эту информацию. Я бы знал этот номер заранее   -  person randomThought    schedule 15.10.2009
comment
См. этот недавний вопрос о похожей проблеме и интересном решении: поплавков в python"> stackoverflow.com/questions/1566936/   -  person Mark Ransom    schedule 15.10.2009


Ответы (3)


Я предполагаю, что у вас есть список, а не массив, но здесь это не имеет большого значения; в 2.6 и более ранних версиях Python что-то вроде:

>>> L = [2.32313e+07, 2.1155e+07, 1.923e+07, 11856, 112.32]
>>> for x in L: print '%f' % x
... 
23231300.000000
21155000.000000
19230000.000000
11856.000000
112.320000

а в версии 2.6 или более поздней — метод .format. Я полагаю, вы знаете, что числа сами по себе, как числа, не имеют никакого «формата» — это строки, которые вы получаете, форматируя числа, например. для вывода, которые находятся в некотором формате. Кстати, варианты этого %f могут позволить вам контролировать количество десятичных знаков, ширину, выравнивание и т. д. - трудно точно сказать, что вам может понадобиться, без дополнительных спецификаций от вас.

В awk вы можете использовать printf.

person Alex Martelli    schedule 15.10.2009

Вы можете использовать locale.format() для форматирования ваших чисел для вывода. Это имеет дополнительное преимущество, заключающееся в том, что оно согласуется с любыми региональными соглашениями, которые можно ожидать при представлении чисел. Если вы хотите получить полный контроль в конкретном месте, где вы делаете вывод, вам лучше использовать print "format" % vars... вариант.

Пример:

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, "")
'C/UTF-8/C/C/C/C'
>>> locale.format("%f", 2.32313e+07, 1)
'23231300.000000'
person VoidPointer    schedule 15.10.2009

Отвечая на последнюю часть вашего вопроса, awk может использовать тот же формат printf:

awk '{printf "%f\n",$1}' exponential_file

Где экспоненциальный_файл содержит:

2.32313e+07
2.1155e+07
1.923e+07
11856
112.32

Вы можете сделать преобразование в переменную для использования позже. Вот упрощенный пример:

awk '{n = sprintf("%f\n",$1); print n * 2}' exponential_file
person Dennis Williamson    schedule 15.10.2009