2014-05-16 43 views
0

我代表一個混淆數字,十進制後有15位數字,即格式長於matlab,我想從混沌數中提取3個數字,每個數字包含5個數字。即如果混沌沒有。是0.d1d2 ... d15,那麼我想要(d1..d5),(d6..d10)&(d11..d15)。它總是四捨五入。我寫了下面的代碼。提取十進制數字後的數字MATLAB

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.

請幫助!

回答

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

使用字符串試試這個辦法 -

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爲重塑想法!希望你不會介意路易斯!

+0

當然不是!此外,這對你的答案並不重要。沒有它,你管理得很好 –

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));