Arrays 整数十进制表示中的数字分隔

Arrays 整数十进制表示中的数字分隔,arrays,matlab,Arrays,Matlab,我想将用户输入作为一个整数,例如(45697),并将前两位数字存储在数组、向量或类似(45 6 9 7),这样我就可以使用一些函数调用来检查前两个值(45),并对它们执行计算 问题是:我不知道如何存储和恢复前两个值 有一个简单的函数调用吗?或者我必须首先将输入存储为任意数组,然后提取前两个值,如果是,如何提取 您可以使用与字符串之间的转换轻松地完成此操作: >> x = 45697; % or whatever positive value >> str = num2st

我想将用户输入作为一个整数,例如
(45697)
,并将前两位数字存储在数组、向量或类似
(45 6 9 7)
,这样我就可以使用一些函数调用来检查前两个值
(45)
,并对它们执行计算

问题是:我不知道如何存储和恢复前两个值


有一个简单的函数调用吗?或者我必须首先将输入存储为任意数组,然后提取前两个值,如果是,如何提取

您可以使用与字符串之间的转换轻松地完成此操作:

>> x = 45697; % or whatever positive value
>> str = num2str(x);
>> y = [str2num(str(1)) str2num(str(2))]

y =

     4     5

这假设数字
x
为正(如果为负,则第一个字符将不是数字)。这似乎是事实,因为根据您的评论,它代表一个电阻。

基于字符串的方法没有错,但这里有一个获取所有数字的数学解决方案:

>> x = 45697
x =

       45697

>> numDigits = floor(log10(x)+1)
numDigits =

     5

>> tens = 10.^(1:numDigits);
>> digitArray = fliplr(floor(mod(x,tens)./(tens/10)))
digitArray =

     4     5     6     9     7
这种方法的关键是使用
mod
一次切掉一个高位数字,将新的第一个数字向下移动到一个位置,最后向下截断以获得该位置的整数值


对于OP,所需的值是
digitArray(1:2)

因为您对单个数字感兴趣,所以甚至不需要调用
str2num
。一种方法就足够了,如
x_str=num2str(x)
,然后用y=x_str(1:2)-'0'减去
'0'

我认为这会起作用,但是看看这个方法,你会发现y=x(1:2)应该起作用,但是运行会产生一个错误:“索引超过矩阵维数。”userin=str2double(inputdlg('请输入电阻器的电阻(欧姆):','电阻');(请求用户输入,然后,)userin=round(userin);x=[userin];y=x(1:2);但是“y”函数在运行过程中会产生一条错误消息,例如“索引超过了矩阵维度”。实际上,我看到了我所做的。我根据您的建议将变量“userinput”放入x中,因为我还不知道它们,所以我没有输入实际的数字?这就是为什么y会产生错误消息的原因,因为它将用户输入作为一个值读取,而不是像用户输入存储为数组时那样读取每个字符本身的值。(用户输入将始终变化)