Matlab错误:下标赋值维度不匹配

Matlab错误:下标赋值维度不匹配,matlab,function,Matlab,Function,我正在尝试将十进制数转换为二进制数。它适用于常规十进制数。然而,当我输入(25.10)时,我得到了下标错误 下面是我的代码 function [binary] = decimal2binary(decimal) % floor : rounds towards minus infinity % rem : remainder after division % num2str : converts numbers to strings % fliplr : flips string bits to

我正在尝试将十进制数转换为二进制数。它适用于常规十进制数。然而,当我输入(25.10)时,我得到了下标错误

下面是我的代码

function [binary] = decimal2binary(decimal)
% floor : rounds towards minus infinity
% rem : remainder after division
% num2str : converts numbers to strings
% fliplr : flips string bits to get correct order
i = 1.0;
q = floor(decimal/2);
r = rem(decimal, 2);
% THIS IS WHERE THE ERROR OCCURS binary(i) = num2str(r(i));
while 2 <= q
    decimal = q;
    i = i+1;
    q = floor(decimal/2);
    r = rem(decimal, 2);
    binary(i) = num2str(r);
end
binary(i + 1) = num2str(q);
binary = fliplr(binary);
end
函数[二进制]=十进制2二进制(十进制)
%地板:朝负无穷大方向旋转
%rem:除法后的余数
%num2str:将数字转换为字符串
%fliplr:翻转字符串位以获得正确的顺序
i=1.0;
q=楼层(十进制/2);
r=rem(十进制,2);
%这是发生错误的地方,二进制(i)=num2str(r(i));

而2假设误差线确实为:

binary(i) = num2str(r(i));
然后,当使用参数25.10调用函数时,在到达此行之前,我们有:

i=1
r=1.10000
num2str(r(i)) = '1.1'
这就是为什么归属

 binary(i) = num2str(r(i));

不起作用。在Matlab中,二进制(1)是1x1字符数组。您正在尝试将一个1x3字符数组(“1.1”)放入其中。

输入的输出可能重复
25.10
?@LuisMendo将十进制数转换为二进制数。。。我的函数有一个小数点问题…作为旁注,Matlab有函数dec2bin,dec2bin(25.10)产生“11001”(25)。我认为您的代码无法生成十进制部分的二进制形式(0.10=0*0.5+0*0.25+0*0.125+1*0.0625…),生成“0.0001…”。也许可以提供一些上下文来解释为什么要转换十进制数。@FrankBoccia您的代码使用什么方法?当错误发生时,您是否使用调试器跟踪执行以查看变量的值?你期望什么
binary(i)=num2str(r(i))要执行(或者是
二进制(i)=num2str(r);
?)如何修复此错误?我是否必须将另一个变量设置为双精度以存储此信息?您应该将r(I)四舍五入,使其等于1,并忽略小数部分。然后需要不同的逻辑来处理十进制数。回顾我之前的评论作为提示:(0.10=0*0.5+0*0.25+0*0.125+1*0.0625…)产生“0.0001…”