2011-06-09 200 views
5

我有一個問題,例如'313397E9'等8位數字串被傳入excel,然後讀作編號'313397000000000'或'3.133970e + 014'。matlab科學計數法問題

然後通過Matlab讀取並識別爲數字,而不是字符串。將其轉換回8位字符串的最簡單方法是什麼?

在此先感謝您的幫助。

+0

您將不得不告訴我們MATLAB和Excel之間的通信機制 – 2011-06-09 13:43:44

+0

它使用actxserver打開excel,然後獲取特定工作表,然後value =(sheet.Range(['A2:A32000'])。value )。這就是我沒有寫的大量代碼,可能不應該搞砸。無論如何,只要它是一個數字就可以將它轉換回8位數字? – Alec 2011-06-09 13:49:58

+0

數字如何存儲在MATLAB中。他們真的是字符串嗎?你想如何將它們存儲在Excel中?字符串或數字? – 2011-06-09 13:58:17

回答

5

Regular expressions to the rescue!您可以使用REGEXPREP將尾隨零轉換爲Ex,其中x是您剛剛替換的零的數量。

%# convert the number to a string 
nn = num2str(3.133970e+014) 

nn = 
313397000000000 

%# replace zeros using regexprep 
regexprep(nn,'([0]*)','E${num2str(length($1))}') 
ans = 
313397E9 

這也適用,如果nn是一個字符串單元陣列,順便說一句,這樣你就可以轉換一氣呵成您的號碼清單。

+0

您是否將313390000000000.0恢復爲313390E9或31339E10? – 2011-06-09 14:23:30

+0

完美的作品!實際上,好點,Jouni ......我想沒有辦法知道價值應該是第一位的...... – Alec 2011-06-09 14:33:34

+0

@Jouni:313390000000000轉換爲31339E10 - 不確定這是否是OP的真正意圖。當然,如果這個想法總是有6位數字,然後是E9,那麼一切都將是相當平凡的。另外,313390000000000.0將被轉換爲313393E10.E1。但是,如果以3e + 014之類的數字開頭,則不應出現此輸入。如果有必要,當然可以在正則表達式中解決這個問題。 – Jonas 2011-06-09 15:06:07