MATLAB强制num2str格式化

时间:2015-08-02 10:41:32

标签: matlab formatting string-formatting precision floating-point-precision

我正在搜索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',但它没有用。

1 个答案:

答案 0 :(得分:3)

对于单个号码

您可以在format specifier中添加类似C的num2str

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

或使用sprintf

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

对于矩阵

num2str与矩阵输入一起使用。在格式说明符中包含所需的分隔符列(此类空格):

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

如果您想要mat2str - 就像格式一样,您只需要在每行末尾处理生成的字符串以包含;(或只是;)并用{括起来[ {1}},]

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]