【问题标题】:Format Matlab data to only have digits after the decimal place将 Matlab 数据格式化为只有小数位后的数字
【发布时间】:2015-05-20 13:37:19
【问题描述】:

我用dlmwrite输出了一些数据,格式如下:

-1.7693255974E+00,-9.7742420654E-04, 2.1528647648E-04,-1.4866241234E+00

我真正想要的是以下格式:

-.1769325597E+00, -.9774242065E-04,  .2152864764E-04, -.1486624123E+00 

每个数字前都需要一个空格,如果数字为负数,则后跟一个符号,并且数字格式以逗号分隔,以指数形式到 10 位有效数字。

以防万一 Matlab 无法写入这种格式 (-.1769325597E+00),它具体叫什么,以便我可以研究解决问题的其他方法?

【问题讨论】:

  • -1.7693255974E+00-.1769325597E+00 是不同的数字,您可能想要 -.1769325597E+01 代替?那么数字的值将保持不变。
  • 我不知道是否有一个术语可以指定您要查找的表格。但是,如果有帮助,我可以告诉您 1.234e+02 被称为标准化科学记数法。之所以称为规范化,是因为它的表示是为了在小数点前有一个前导数字而排列的。
  • 是的,新号码应该是 -.1769325597E+01。为混乱道歉,您的更正评论有助于解决我原来的问题。我非常感谢您的帮助。谢谢!毒物。

标签: matlab number-formatting


【解决方案1】:

虽然这在道德上感觉是错误的,但可以使用正则表达式来移动小数点。这是什么功能

myFormat = @(x) regexprep(sprintf('%.9e', 10*x), '(\d)\.', '\.$1');

确实如此。输入值在格式化之前乘以 10,以说明被移动的点。示例:myFormat(-pi^7) 返回-.3020293228e+04

以上适用于个别数字。以下版本还能够格式化数组,提供逗号分隔符。第二个 regexprep 删除尾随逗号。

myArrayFormat = @(x) regexprep(regexprep(sprintf('%.9e, ', 10*x), '(\d)\.', '\.$1'), ', $', '');

示例:myArrayFormat(1000*rand(1,5)-500) 返回

-.2239749230e+03, .1797026769e+03, .1550980040e+03, -.3373882648e+03, -.3810023184e+03

对于单个号码,myArrayFormatmyFormat 的工作方式相同。

【讨论】:

  • 这个功能正是我所需要的。我仍然需要弄清楚如何将所有格式化的数据集放入指定的结构中,但关键问题是移动小数点的位置。我需要这种格式来进行分析,但在任何可以执行此操作的工具中都找不到写入函数。我没有想到要这样做。正则表达式非常方便!衷心感谢您的帮助。毒物。
猜你喜欢
  • 1970-01-01
  • 2011-06-04
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多