Convertir exponencial a flotar

Este es mi código, tratando de convertir el segundo campo de la línea de exponencial a flotante.

outputrrd = processrrd.communicate() (output, error) = outputrrd output_lines = output.split('\n') for line in output_lines: m = re.search(r"(.*): ", line) if m != None: felder = line.split(': ') epoch = felder[0].strip(':') utc = epoch2normal(epoch).strip("\n") #print felder[1] data = float(felder[1]) float_data = data * 10000000 print float_data resultslist.append( utc + ' ' + hostname + ' ' + float_data) 

Pero, el progtwig se detiene con este error:

 File "/opt/omd/scripts/python/livestatus/rrdfetch-convert.py", line 156, in  data = float(felder[1]) ValueError: invalid literal for float(): 6,0865000000e-01 

¿Alguien sabe el motivo?

La forma más fácil es reemplazar! Un ejemplo simple:

 value=str('6,0865000000e-01') value2=value.replace(',', '.') float(value2) 0.60865000000000002 

El motivo es el uso de comas en 6,0865000000e-01 . Esto no funcionará porque float() no reconoce la configuración regional. Ver PEP 331 para más detalles.

Pruebe con locale.atof() , o reemplace la coma con un punto.

Simplemente echando una cuerda en el flotador:

 new_val = float('9.81E7') 

El float es correcto , solo use el format para mostrarlo como desee, es decir:

 print format(the_float, '.8f') 

Creo que te es útil:

 def remove_exponent(value): """ >>>(Decimal('5E+3')) Decimal('5000.00000000') """ decimal_places = 8 max_digits = 16 if isinstance(value, decimal.Decimal): context = decimal.getcontext().copy() context.prec = max_digits return "{0:f}".format(value.quantize(decimal.Decimal(".1") ** decimal_places, context=context)) else: return "%.*f" % (decimal_places, value) 

Este trabajo para mí, pruébalo.

 def remove_exponent(value): decial = value.split('e') ret_val = format(((float(decial[0]))*(10**int(decial[1]))), '.8f') return ret_val