MATLAB强制将num2str格式化

3

我正在寻找与这个请求相反的结果

因此,当我输入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个回答

3

处理单个数字

您可以在num2str 中包含类似于C语言的格式说明符

>> 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的格式,您只需要处理生成的字符串,以在每行末尾包含;(或仅包含;),并用[]括起来:
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]

1
谢谢!我之前是使用fprintf来完成这个任务,但我不知道在MATLAB函数中也可以使用类C语言的格式化方式。嗯,这很有意义 :) - jeff
亲爱的@Luis Mendo(或任何其他未来的访问者),请查看我对问题的编辑。是否有一种方法可以添加前导零? - jeff
1
@halilpazarlama 当然可以!这是格式说明符选项之一。请查看编辑后的答案。 - Luis Mendo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接