2012-02-08 116 views
2

這是我的代碼,試圖將該行的第二個字段從指數轉換爲浮點數。將指數轉換爲浮點

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) 

但是,該程序與此停止錯誤:

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

有誰知道原因嗎?

+0

你的浮點數字包含逗號'「,」'而不是小數點'「。」'。 – 2012-02-08 15:01:37

回答

9

簡單的方法是替換!一個簡單的例子:

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

非常感謝大家! – StefanS 2012-02-08 15:27:41

9

原因是在6,0865000000e-01中使用了逗號。這不會工作,因爲float()不是區域意識。詳情請參閱PEP 331

嘗試locale.atof(),或用點替換逗號。

0

我認爲這是對你有用:

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) 
0

僅僅通過鑄造字符串轉換成浮動:

new_val = float('9.81E7') 
0

你不需要到float因爲轉換它的值是正確,使用format來顯示它,如:

print format(the_float, '.8f')