私は一連の値を含むPythonの配列を持っています。それらのいくつかは
2.32313e+07
2.1155e+07
1.923e+07
11856
112.32
指数形式を小数形式に変換する方法
追加: UNIX で awk を使用して印刷するときに、指数を直接 10 進数に変換する方法はありますか?
配列ではなくリストがあると思いますが、ここでは大きな違いはありません。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を使用できます。
locale.format() を使用して、数値を出力用にフォーマットできます。これには、数値の表示で予想されるロケール固有の規則と一貫性があるという追加の利点があります。出力を行う特定の場所で完全な制御が必要な場合は、print "format" % vars... variantを使用することをお勧めします。
例:
>>> import locale
>>> locale.setlocale(locale.LC_ALL, "")
'C/UTF-8/C/C/C/C'
>>> locale.format("%f", 2.32313e+07, 1)
'23231300.000000'
質問の最後の部分への回答としてawk
、同じprintf
形式を使用できます。
awk '{printf "%f\n",$1}' exponential_file
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