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科学记数法问题的主要内容,如果未能解决你的问题,请参考以下文章

Matlab中如何获取科学记数法的指数

MATLAB 中的科学记数法

将 CSV 导入 MATLAB 的正确科学记数法

Matlab:在文本框中应用科学记数法

matlab中怎么设置非科学计数法?

Matlab,如何调整图形上的轴值(科学记数法 - 精度不够)[重复]