我有一个双倍的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];
Run Code Online (Sandbox Code Playgroud)
这是我目前正在使用的代码
n = fix(rem(B,1)*10^N);
s1 = sprintf('%.0f',n);
ttemp = (s1-'0')';
t=zeros(N,1);
t(1:size(ttemp,1))=ttemp;
Run Code Online (Sandbox Code Playgroud)
但它给了我错误的结果.
的确,假设
B=[7.0261e-05]和N=5.上面的代码让我
t=[7;0;0;0]没有认识到那里e-05.
有关如何解决此问题的任何建议?
如果数字少于数字sprintf,你需要告诉你,你想要显示所有领先0者N:
你目前的方式:
sprintf('%.0f', n);
% '7'
Run Code Online (Sandbox Code Playgroud)
正确的方法:
s1 = sprintf('%05.f', n);
% '00007'
Run Code Online (Sandbox Code Playgroud)
任何一般的例子N是:
s1 = sprintf(['%0', num2str(N), '.f'],n);
Run Code Online (Sandbox Code Playgroud)
你当前编写它的方式,sprintf命令的outpuf 只是一个'7'当你从开头填写输出时产生a 7后跟all 0(s初始化输出的值).
如果我们将其初始化为NaN值而不是0's,您可以看到问题所在
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
Run Code Online (Sandbox Code Playgroud)
或者,您可以保留您拥有的所有内容,只需t从结尾而不是从头开始修改
t = zeros(N, 1);
t((end-numel(ttemp)+1):end) = ttemp;
Run Code Online (Sandbox Code Playgroud)
'不是转置,.'是.
使用numel,以确定在一个矢量元素的数量,而不是size因为它会为行和列向量工作