将Matlab数据格式化为只有小数位后的数字

时间:2015-03-17 22:11:15

标签: matlab number-formatting

我使用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 个答案:

答案 0 :(得分:0)

虽然这在道德上是错误的,但可以使用正则表达式来移动小数点。这就是函数

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的工作方式相同。