在Matlab中存储逗号后的数字

use*_*148 0 matlab

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

我想创建一个t存储N逗号后面的数字的向量.如果逗号后面的数字是<N,那么向量中的相应元素t应该是0.

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

有关如何解决此问题的任何建议?

Sue*_*ver 5

如果数字少于数字sprintf,你需要告诉你,你想要显示所有领先0N:

你目前的方式:

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)

未经请求的指针

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

  2. 使用numel,以确定在一个矢量元素的数量,而不是size因为它会为行和列向量工作