matlab科学计数法问题

问题描述:

我有一个问题,例如'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

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