matlab 格式化输出数字;不知道小数点后面多少位,关于fprintf&sprintf 问题;

我有一些浮点数;比如在 data=xlsread('Gas_pressure.xls','Real_comp','B1:C50');
现在我要输出这个data到txt里面(fid);要用到fprintf函数;关键是如何控制格式。
要求:每一个数字保留8位(包含小数点),有负号则包含负号(正号不用),浮点数的小数点位置在随时变化;比如这样的数字就是对的:
2.2312 23422.56(前一个后面补充2个空格)
234.343-999.99 (后一个数字补充2个空格)
上面的结果形式就是我要的;
我直接
re=fprintf(fid,'%-8s\n',num2str(data(1,1)),num2str(data(1,2)));
或者
re=fprintf(fid,'%-8f\n',data(1,1),data(1,2));

都是不行的。
再比如,数据Data(2,1)=456.454545,Data(2,2)=34232342.3422
输出要求为
456.454534232342.3422

>> a=-2344.23423 % double 类型
a =
-2.3442e+03
>> b=num2str(a) % 转换为 char 类型
b =
-2344.2342
>> c=b(1:8)
c =
-2344.23 % 取 char 的前 8 位字符

%%提示:可以做成一个函数,方便反复调用 c=double2str(a,8)追问

你好,你的回答很精彩,但是我发现,我的问题需求又提高了;因为有的数字太大了,比如上亿了,需要用科学计数法格式化输出,比如:x=212222223.2232;y=-232322321.23;
需要格式化输出为:
2.1222e8
-2.323e8
就是保留总的位数为8个,但是怎么办呢?
回答了,再加20分给你。

追答

>> a=-432535345 % 原始数据
a =
-432535345
>> s=sprintf('%5.3e',a) % 格式转换为字符
s =
-4.325e+008
>> r=[s(1:7) s(end)] % 数据整理
r =
-4.325e8

温馨提示:答案为网友推荐,仅供参考