我在0
和1
之间有一个双倍存储在Matlab B
的数组中。
我想在逗号后面创建一个存储t
位的向量N
。如果逗号后面的数字为<N
,则向量t
中的相应元素应为0
。
假设N=10
和B=[0.908789]
。然后,
t=[9;0;8;7;8;9;0;0;0;0];
这是我目前正在使用的代码
n = fix(rem(B,1)*10^N);
s1 = sprintf('%.0f',n);
ttemp = (s1-'0')';
t=zeros(N,1);
t(1:size(ttemp,1))=ttemp;
但它给了我错误的结果。
确实,假设
B=[7.0261e-05]
和N=5
。上面的代码给了我
t=[7;0;0;0]
没有认识到e-05
。
有关如何解决这个问题的任何建议吗?
答案 0 :(得分:5)
如果数字少于sprintf
,您需要告诉0
您希望所有领先的N
实际显示:
您目前的方式:
sprintf('%.0f', n);
% '7'
正确的方法:
s1 = sprintf('%05.f', n);
% '00007'
任何N
的一般示例都是:
s1 = sprintf(['%0', num2str(N), '.f'],n);
您目前编写的方式,sprintf
命令的输出只是'7'
,当您从开头填写输出时产生7
后跟所有0
&#39; s(您将输出初始化为的值)。
如果我们将其初始化为NaN
值而不是0
,那么您可以看到问题所在
N = 5;
B = 7.0261e-05;
n = fix(rem(B,1)*10^N);
% 7
s1 = sprintf('%.0f',n);
% '7'
ttemp = (s1 - '0').';
% 7
t = nan(N, 1);
% NaN NaN NaN NaN NaN
t(1:size(ttemp,1)) = ttemp;
% 7 NaN NaN NaN NaN
或者,您可以保留所有内容,只需从结尾修改t
而不是开头
t = zeros(N, 1);
t((end-numel(ttemp)+1):end) = ttemp;
'
不是转置,.'
是。
使用numel
来确定向量中的元素数而不是size
,因为它对行和列向量都有效