のようになりますように、関数fprintfを使用する方法配列、単一の数値書式、および区切り文字を受け取り、目的の文字列を返します。そして、あなたは機能の両方で動作するでしょうが、私は、+
フラグを好む、先頭の空白スペースフラグを見つけながら:
A=[-0.1 0];
B=[0.2 -2];
minLenExp = 4;
extsprintf = @(num,fmt,delim) ...
strjoin(cellfun(...
@(toks)[toks{1},repmat('0',1,max([0,minLenExp-length(toks{2})])),toks{2}],...
regexp(sprintf(fmt,num),'([+-\s][\.\d]+[eE][+-])(\d+)','tokens'),...
'UniformOutput',false),delim);
Astr = extsprintf(A,'%+.4E',' ');
Bstr = extsprintf(B,'%+.4E',' ');
disp([Astr;Bstr]);
この利回りの実行:
>> foo
-1.0000E-0001 +0.0000E+0000
+2.0000E-0001 -2.0000E+0000
を(foo
はまさにスクリプトですファイルが呼び出されます)
ここでは代わりにそれを想定しての指数形式を検索するより一般的なアプローチです:。
の
A=[100 -0.1 0].';
B=[30 0.2 -2];
extsprintf = @(fmt,arr) ...
regexprep(...
sprintf(fmt,arr),...
regexprep(regexp(sprintf(fmt,arr),'([+-\s][\.\d]+[eE][+-]\d+)','match'),'([\+\.])','\\$1'),...
cellfun(@(match)...
cellfun(...
@(toks)[toks{1},repmat('0',1,max([0,minLenExp-length(toks{2})])),toks{2}],...
regexp(match,'([+-\s][\.\d]+[eE][+-])(\d+)','tokens'),...
'UniformOutput',false),...
regexp(sprintf(fmt,arr),'([+-\s][\.\d]+[eE][+-]\d+)','match')));
fmt = '%3d %+.4E %+.4e';
disp(extsprintf(fmt,A));
disp(extsprintf(fmt,B));
出力
>> foo
100 -1.0000E-0001 +0.0000e+0000
30 +2.0000E-0001 -2.0000e+0000
@BERKO注:私はあなたの以前のリビジョンのいずれかで動作するように拡張を追加しました。 – TroyHaskin