十进制MATLAB后提取数字

时间:2014-05-16 13:46:40

标签: matlab matlab-deployment

我代表一个混乱的数字,在十进制之后有15位数,即在matlab中格式化为长,我想从混沌数中提取3个数字,每个数字包含5位数。即如果混乱没有。是0.d1d2 ... d15然后我想要(d1..d5),(d6..d10)& (d11..d15)。它总是四舍五入。我写了下面的代码。

num=x(n);
a1=floor(num*10^5);
disp('a1');
disp(a1);
a2=floor(num*10^10-a1*10^5);
disp(a2);
num=floor(num*10^15);
a3=mod(num,100000);
disp('a3');
disp(a3);

,输出

0.320446597556797

a1
   32044
a2
   65975

a3
   56796

它显示a3为56796,但我想要56797.

请帮助!!!

3 个答案:

答案 0 :(得分:2)

使用字符串尝试此方法 -

n = 0.320446597556797 %// Input decimal number

t1 = num2str(n,'%1.15f')
t2 = strfind(t1,'.')
a = str2num(reshape(t1(t2+1:end),5,[])') %// output as a single matrix

感谢@Luis的重塑理念!希望你不要介意路易斯!

答案 1 :(得分:2)

问题很可能是,您为提取一组数字而执行的每项操作都会引入一个小错误,该错误会反映在最后一位数字中。

避免这种情况的替代方法:

num = pi; %// for example
str = num2str(num,'%0.15f'); %// string representation with 15 decimal digits
str = str(find(str=='.')+1:end); %// keep only digits after decimal point
a = base2dec(reshape(str,5,[]).',10); %'// convert string parts into numbers

答案 2 :(得分:0)

这可能是一个舍入错误,但是如果你真的想要那些特定的值,只需转换为一个字符串然后将字符串分开。像下面的简单

a = 0.320446597556797;
format longg
aStr = num2str(a,'%1.15f');
decimals = regexp(aStr,'\.','Split');
decimals = decimals{2};

a1 = str2double(decimals(1:5));
a2 = str2double(decimals(6:10));
a3 = str2double(decimals(11:15));