简体   繁体   中英

Python - Convert scientific notation string to float retaining decimal places

I am using python to read some float values from a file. The values read are input to an 'Ada'(Programming Language) program.

The values being read are in different formats (scientific, decimal) and I would like to retain the format.

Everything works well with simple float() operation except when converting '1.0e-5' to float.

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

1e-5 when used in Ada program gives

error:negative exponent not allowed for integer literal

1.0e-35 works with ada program.

I know if I use format I can get 1.0e-5

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

But this changes format for other read values also as my reading/manipulation function is common.

How should I approach this problem?

and if

float('1.0')
#returns 1.0

why same behavior is not followed when converting a scientific notation string to float?

(My reading/manipulation function is common. Using formatter string will change the formatting of other read values also)

You could use a custom float to string conversion function which checks if the number will be accepted by Ada using a regular expression (which tests if there are only non-dots before the exponent character, and in which case only convert with 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))

prints:

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

only the first value is corrected, other values are just the string representation of a float, unchanged.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM