Python科学计数法强制保留前导零

3
我希望使用Python2.7打印科学计数法的浮点数,强制以0开头。例如,假设
a=1234567890e12
print '{:22.16E}'.format(a)
1.2345678900000000E+21

然而,我希望输出的打印格式如下:
0.1234567890000000E+22

注意指数加一,因为期望的输出强制为前导零。如何实现这一点? 谢谢。

3
为什么你想这样做?这不是科学记数法的标准做法。参见http://en.wikipedia.org/wiki/Scientific_notation。 - FuriousGeorge
1
我需要使两个不同的文件在数字上完全兼容。其中一个是由Fortran 90编写的,写入格式为:“1pd26.16”。 - Ehsan
3个回答

5
Fortranformat软件包可以实现您所需的功能。
import fortranformat as ff

a=1234567890e12
lineformat = ff.FortranRecordWriter('(1E26.16)')
lineformat.write([a])

输出:

'    0.1234567890000000E+22'

1

也处理E-。

def fortranFormat(n):
    a = '{:.4E}'.format(float(n))
    e = a.find('E')
    return '0.{}{}{}{:02d}'.format(a[0],a[2:e],a[e:e+2],abs(int(a[e+1:])*1+1))

print(fortranFormat('60.505'))
print(fortranFormat('74.705'))
print(fortranFormat('2.000000E-09'))

输出:

0.60505E+02
0.74705E+02
0.20000E-08

-1

嗯,既然你想做的不是“标准”的科学计数法,我不确定是否有一个简单的调用来实现这个。然而,这里有一个hack可以解决问题。

a = 1234567890e12
A = str(a)
exp = A.find('e+')
converted = '0.' + A[0] + A[2:exp] + 'e+' + str(int(A[exp+2:])+1)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接