我使用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),具体是什么,以便我可以研究解决问题的其他方法?
答案 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
对于个别号码,myArrayFormat
与myFormat
的工作方式相同。