代码之家  ›  专栏  ›  技术社区  ›  inxp

Python-将科学记数法字符串转换为保留小数点的浮点数

  •  1
  • inxp  · 技术社区  · 7 年前

    正在读取的值是不同的格式(科学的,十进制的),我想保留格式。

    除了将“1.0e-5”转换为float外,使用简单的float()操作一切都可以正常工作。

    >>float('1.0e-5')
    #returns 1e-5
    

    1e-5用于Ada程序时

    error:negative exponent not allowed for integer literal
    

    1.0e-35与ada程序配合使用。

    我知道如果我使用格式我可以得到1.0e-5

    >>>"{:.1E}".format(float('1.0e-5'))
    #returns '1.0E-5'
    

    但这也改变了其他读取值的格式,因为我的读取/操作函数很常见。

    我应该如何处理这个问题?

    float('1.0')
    #returns 1.0
    

    为什么在将科学符号字符串转换为浮点数时不遵循相同的行为?

    (我的阅读/操作功能很常见。使用格式化程序字符串也会更改其他读取值的格式)

    1 回复  |  直到 7 年前
        1
  •  1
  •   Jean-François Fabre    7 年前

    format ):

    import re
    
    def ada_compliant_float_as_string(f):
        return "{:.1e}".format(f) if re.match("^-?[^\.]e",str(f)) else str(f)
    
    for f in [-1e-5,1e-5,1.4e-5,-12e4,1,1.0]:
        print(ada_compliant_float_as_string(f))
    

    印刷品:

    -1.0e-05
    1.0e-05
    1.4e-05
    -120000.0
    1
    1.0
    

    只有第一个值被更正,其他值只是浮点数的字符串表示,不变。