MATLAB 强制 num2str 格式化

MATLAB force num2str to format

我正在搜索 this request

的反向

所以当我输入 num2str(foo,3) 时,我得到了这个:

foo=0.00781
foo=0.0313
foo=0.125
foo=0.5
foo=2
foo=8

不过我想让它们的长度都一样,所以像这样:

foo=0.0078
foo=0.0313
foo=0.1250
foo=0.5000
foo=2.0000
foo=8.0000

-我怎样才能用 num2str 做到这一点? (如果 mat2str 也有效,我将不胜感激)

感谢您的帮助!

编辑:

我注意到这个问题还有另一个尚未解决的部分,即大于 10、100、1000 等的数字

如果我想要这个怎么办:?

foo=000.5000
foo=002.0000
foo=008.0000
foo=032.0000
foo=128.0000

即将前导零添加到指定长度?我尝试了 '%3.3f' 但它不起作用。

单个号码

你可以包含一个类 C format specifier in num2str:

>> num2str(.125, '%0.4f')
ans =
0.1250

或使用sprintf:

>> sprintf('%0.4f', .125)
ans =
0.1250

对于矩阵

对矩阵输入使用 num2str。在格式说明符中包含所需的分隔列(如 space):

>> num2str([.125 .5; 2 8], '%0.4f ')
ans =
0.1250 0.5000
2.0000 8.0000

如果你想要 mat2str-like 格式,你只需要处理结果字符串以在每行的末尾包含 ;(或只是 ;)并括起来[, ]:

x = [.125 .5; 2 8]; 
s = num2str(x, '%0.4f ');
s = [s repmat('; ', size(s,1), 1)].';
s = ['[' s(1:end-2) ']'];

在示例中,这给出了

>> s
s =
[0.1250 0.5000; 2.0000 8.0000]

前导零

如果您希望前导零达到固定数量的字符,请使用 '%08.4f' 形式的格式说明符。这意味着 4 个小数位,总共 8 个字符,最多 3 个前导零。例如,

x = [.125 .5; 2 8]; 
s = num2str(x, '%08.4f ');
s = [s repmat('; ', size(s,1), 1)].';
s = ['[' s(1:end-2) ']'];

给予

>> s
s =
[000.1250 000.5000; 002.0000 008.0000]