我表示的是一个十进制后的15位混沌数,也就是matlab中的长格式,我想从混沌数中提取每个包含5位数的3个数字。也就是说,如果混乱,不。是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。
救命啊!
发布于 2014-05-16 14:01:12
问题很可能是,每次提取一组数字的操作都会引入一个小错误,这个错误反映在最后一个数字中。
避免这种情况的另一种办法是:
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
发布于 2014-05-16 13:59:45
这可能是一个舍入错误,但如果您真的想要这些特定的值,只需转换成一个字符串,然后撕开字符串。像下面这样简单的东西
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));
https://stackoverflow.com/questions/23696795
复制相似问题