【问题标题】:matlab scientific notation issuematlab科学记数法问题
【发布时间】: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

标签: matlab scientific-notation


【解决方案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 个电子表格。
猜你喜欢
  • 2011-05-08
  • 1970-01-01
  • 2021-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
相关资源
最近更新 更多