【问题标题】:python scientific notation with forced leading zero强制前导零的python科学计数法
【发布时间】:2014-01-21 19:02:22
【问题描述】:

我想让Python2.7以科学计数法打印出浮点数,强制以0开头。例如,假设

a=1234567890e12
print '{:22.16E}'.format(a)
1.2345678900000000E+21

但是,我想要一个看起来像这样的打印输出:

0.1234567890000000E+22

请注意,由于所需的输出被强制为前导零,因此指数增加了 1。我怎样才能做到这一点? 谢谢。

【问题讨论】:

  • 很好奇,你为什么要这么做?这不是科学记数法的标准en.wikipedia.org/wiki/Scientific_notation
  • 我需要逐个地使两个不同的文件完全兼容。一个是由 Fotran 90 编写的,写入格式如下:“1pd26.16”

标签: python-2.7 scientific-notation formatted-input


【解决方案1】:

fortranformat 包将满足您的需求。

import fortranformat as ff

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

输出:

'    0.1234567890000000E+22'

【讨论】:

    【解决方案2】:

    也处理 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
    

    【讨论】:

      【解决方案3】:

      好吧,既然你想做的不是“标准”科学记数法,我不确定是否有一个简单的调用来做到这一点。然而,这是一个可行的技巧

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-30
        相关资源
        最近更新 更多