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



我正在使用python从文件中读取一些浮点值。读取的值是"Ada"(编程语言(程序的输入。

正在读取的值采用不同的格式(科学、十进制(,我想保留该格式。

除了将"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

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

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

您可以使用自定义浮点数到字符串转换函数,该函数使用正则表达式检查 Ada 是否会接受该数字(该函数测试指数字符之前是否只有非点,在这种情况下仅使用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

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

最新更新