matlab科学记数法问题
Posted
技术标签:
【中文标题】matlab科学记数法问题【英文标题】:matlab scientific notation issue 【发布时间】:2011-06-09 13:41:41 【问题描述】:我遇到一个问题,将 8 位字符串(例如“313397E9”)传递到 excel 中,然后读取为数字“313397000000000”或“3.133970e+014”。
然后这被 Matlab 读取并识别为数字,而不是字符串。将其转换回 8 位字符串的最简单方法是什么?
提前感谢您的帮助。
【问题讨论】:
你将不得不告诉我们MATLAB和Excel之间的通信机制 它使用actxserver打开excel,然后获取具体的sheet,然后value=(sheet.Range(['A2:A32000']).value)。这一切都在我没有编写的大量代码中,并且可能不应该乱用。一旦它是一个数字,有没有办法将它转换回 8 位? 数字是如何存储在 MATLAB 中的。它们真的是字符串吗?您希望它们如何存储在 Excel 中?字符串还是数字? 如果你想停止 Excel 转换为数字,那么我认为你应该能够使用这样的符号:'1234
另见:biomedcentral.com/1471-2105/5/80
【参考方案1】:
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
是一个字符串元胞数组,这也有效,顺便说一句,这样您就可以一次转换您的数字列表。
【讨论】:
您是否将 313390000000000.0 恢复为 313390E9 或 31339E10? 完美运行!实际上,很好,Jouni...我想一开始就无法知道该值应该是什么... @Jouni: 313390000000000 转换为 31339E10 - 不确定这是否是 OP 的真正意图。当然,如果这个想法总是有 6 位数字后跟 E9,那么一切都将是微不足道的。此外,313390000000000.0 将转换为 313393E10.E1。但是,如果您以 3e+014 之类的数字开头,则不应出现此输入。如有必要,这当然可以在正则表达式中修复。 字符串可以是 313390E9 或 31339E10,但 excel 会将两者都转换为 3.13E+14。不过,E 更可能接近尾声,所以我想我会使用 Jonas 的解决方案,而不是修改 5000 个电子表格。以上是关于matlab科学记数法问题的主要内容,如果未能解决你的问题,请参考以下文章