我代表一个混乱的数字,在十进制之后有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.
请帮助!!!
答案 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));