在Matlab中存储逗号后的数字

时间:2017-03-24 16:39:19

标签: matlab

我在01之间有一个双倍存储在Matlab B的数组中。

我想在逗号后面创建一个存储t位的向量N。如果逗号后面的数字为<N,则向量t中的相应元素应为0

假设N=10B=[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

有关如何解决这个问题的任何建议吗?

1 个答案:

答案 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;

未经请求的指针

  1. '不是转置,.'是。

  2. 使用numel来确定向量中的元素数而不是size,因为它对行和列向量都有效