在Python中将指数转换为小数
我在Python里有一个数组,里面包含了一些值,其中有:
2.32313e+07
2.1155e+07
1.923e+07
11856
112.32
我该怎么把这些科学计数法的格式转换成普通的小数格式呢?
另外:有没有办法在UNIX系统中用awk直接把指数格式转换成小数格式打印出来呢?
3 个回答
0
针对你问题的最后一部分,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
1
你可以使用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'
5
我想你可能在用列表而不是数组,不过这两者在这里差别不大。在Python 2.6及之前的版本中,可以用类似这样的方式:
>>> 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。