我正在使用python从文件中读取一些浮点值。读取的值输入到“ Ada”(编程语言)程序中。
正在读取的值具有不同的格式(科学,十进制),我想保留该格式。
除了将'1.0e-5'转换为float之外,一切都可以通过简单的float()操作很好地工作。
>>float('1.0e-5')
#returns 1e-5
在Ada程序中使用的1e-5给出
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
为什么将科学计数法字符串转换为float时不会遵循相同的行为?
(我的读取/操作功能很常见。使用格式化程序字符串也会更改其他读取值的格式)
答案 0 :(得分:1)
您可以使用自定义浮点数到字符串的转换函数,该函数使用正则表达式检查数字是否会被Ada接受(该函数会测试指数字符前是否只有非点,并且在这种情况下只能使用{ {1}}):
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))
仅第一个值被更正,其他值仅是浮点数的字符串表示形式,不变。