在matlab中将十进制转成二进制或者将二进制转成十进制都有现成的函数,但是这些函数所针对的范围是有限的,matlab中的bin2dec,dec2bin都是针对的整数的情况,对小数的情况却无能为力了。我在应用过程中需要用到了需要将十进制小数转化成二进制小数,所以查了些资料,写了两个函数,希望能对需要的人有些帮助。
%函数参数和返回值说明
% 返回array保存的是十进制小数转换成的二进制数据
% 输入两个参数:
% innum:要转换的十进制
% N:希望转换成的位数
%返回最高位为符号位
function y=dectobin(innum,N)
if (innum>1)|(N == 0)|(innum<-1)%判断输入的有效性
disp('error!');
return;
end
count=0;
flag=0;
%flag为0表示是整数,如果为1表示是负数
tempnum=innum;
record=zeros(1,N);
while(N)
count=count+1;%长度小于N
if(count>N) N=0;
break;
end
if innum < 0
tempnum=tempnum*(-1);
flag=1;
end;
tempnum=tempnum*2;
%小数转换为二进制,乘2取整
if tempnum>1
record(count)=1;
tempnum=tempnum-1;
elseif(tempnum==1)
record(count)=1;
N=0;%stop loop
else
record(count)=0;
end
end
% result=[];
% for i=1:length(record)
% result=[result record(i)];
% end; % y=result;
y=record;
%本函数的功能是将输入的二进制小数转化成十进制小数
% 参数说明:
% binstr:输入的二进制字符串
%返回的是转化后的十进制数
sum function d=bintodec(binstr) len=length(binstr);
%需要转化的二进制的字符串
sum=0;
for i=1:len
sum=sum+binstr(1,i)*2^(-i);
end;
d=sum;