Matlab科学计数法问题

5
我遇到了一个问题,就是一个8位数的字符串,比如'313397E9',在传入Excel后,会被读做数字'313397000000000'或'3.133970e+014'。

然后,这个数字会被Matlab读取并识别为数字,而不是字符串。那么,将其转换回8位数的字符串最容易的方法是什么呢?

非常感谢您的帮助!


你需要告诉我们MATLAB和Excel之间的通信机制。 - David Heffernan
MATLAB中的数字是如何存储的?它们真的是字符串吗?在Excel中,您希望将它们存储为字符串还是数字? - David Heffernan
如果您想停止Excel转换为数字,那么我认为您应该能够使用这样的符号:'1234 - David Heffernan
我尝试过使用num2str(value,'%E'),但是它给了我3.133970E+014。如果我能得到正确指数的字符串,我就可以解析它。 - Alec
3
另请参见:http://www.biomedcentral.com/1471-2105/5/80 - Jouni K. Seppänen
显示剩余2条评论
1个回答

5
您可以使用REGEXPREP将尾随的零转换为Ex,其中x是您刚刚替换的零的数量。 正则表达式来拯救! 您可以使用REGEXPREP进行转换。
%# 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是一个字符串的单元数组,也可以使用此方法,这样你就可以一次性将数字列表转换为字符串。


你将313390000000000.0恢复成313390E9还是31339E10? - Jouni K. Seppänen
完美运作!实际上,Jouni说得很好...我想根本没有办法知道一开始该是什么值... - Alec
@Jouni:313390000000000被转换为31339E10-不确定这是否是OP真正想要的。当然,如果想法是始终有6个数字后跟E9,那么一切都将相当简单。此外,313390000000000.0将被转换为313393E10.E1。但是,如果您从像3e+014这样的数字开始,则不应出现此输入。如果必要,当然可以在regexp中修复此问题。 - Jonas
该字符串可能是313390E9或31339E10,但Excel会将两者都转换为3.13E+14。不过,更有可能的是E在末尾,因此我认为我将使用Jonas的解决方案,而不是修改5000个电子表格。 - Alec

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接