从editbox Matlab获取最后一个数字

从editbox Matlab获取最后一个数字,matlab,numbers,brackets,trigonometry,Matlab,Numbers,Brackets,Trigonometry,我正在用matlab制作计算器,我想在按下sin按钮时,从editbox中获取最后一个输入数字,并将其放入sind()括号中。怎么做?我找了几个小时,什么也没找到 现在,我的sin按钮代码如下所示: % --- Executes on button press in pushbutton40. function pushbutton40_Callback(hObject, eventdata, handles) inpfieldtxt = get(handles.edit1,'string'

我正在用matlab制作计算器,我想在按下sin按钮时,从editbox中获取最后一个输入数字,并将其放入sind()括号中。怎么做?我找了几个小时,什么也没找到

现在,我的sin按钮代码如下所示:

  % --- Executes on button press in pushbutton40.
function pushbutton40_Callback(hObject, eventdata, handles)
inpfieldtxt = get(handles.edit1,'string');
if(strcmp(inpfieldtxt,'0.')==1)
    set(handles.edit1,'String','sind(');
else
    inpfieldtxt=strcat(inpfieldtxt,'sind(');
    set(handles.edit1,'String',inpfieldtxt)
end
它只是在editbox中插入'sind('s),然后我需要手动输入数字和右括号'

我想让这个按钮作为Windows7计算器的sin按钮。它还获取最后一个数字并将其放入sin(此处)

我明白了! 以下是解决方案:

% --- Executes on button press in pushbutton40.
function pushbutton40_Callback(hObject, eventdata, handles)
inpfieldtxt = get(handles.edit1,'string');
if(strcmp(inpfieldtxt,'0.')==1)
    set(handles.edit1,'String','sind(');
else
    isNumber = (inpfieldtxt >= '0') & (inpfieldtxt <= '9');
    i=length(inpfieldtxt);
    while (i > 0) && (isNumber(i))
        if isNumber(i)
            i = i-1;
        end
    end
    lastnmb = inpfieldtxt(i+1:end);
    inpfieldtxt = inpfieldtxt(1:i);
    set(handles.edit1,'String',[inpfieldtxt,'sind(',lastnmb,')']);
end
%---在按下按钮40时执行。
函数pushbutton40_回调(hObject、eventdata、handles)
inpfieldtxt=get(handles.edit1,'string');
if(strcmp(inpfieldtxt,'0')==1)
set(handles.edit1、'String'、'sind(');
其他的
isNumber=(inpfieldtxt>='0')&(inpfieldtxt 0)&&(isNumber(i))
如果是数字(i)
i=i-1;
结束
结束
lastnmb=inpfieldtxt(i+1:end);
inpfieldtxt=inpfieldtxt(1:i);
set(handles.edit1,'String',[inpfieldtxt,'sind(',lastnmb',)']);
结束
非常感谢您的帮助!

ivedlauktxt(结束)
给出了最后一个字符

仔细想想,您可能需要查看
str2num()

编辑:

考虑到您正在寻找的具体事物,这可能是一种方法:

isNumber = (ivedlauktxt >= '0')  & (ivedlauktxt <= '9')
i=length(ivedlauktxt); %Initialize loop
while i>0   && (isNumber(i))
   if isNumber(i)
      i=i-1;
   end
end

str2num( ivedlauktxt(i+1:end) ) 
isNumber=(ivedlaukxt>='0')&(ivedlaukxt 0&&(isNumber(i))
如果是数字(i)
i=i-1;
结束
结束
str2num(ivedlaukxt(i+1:end))

没有测试它,但它应该能让你达到目的!

看起来你试图在这里一步完成所有事情,当事情不起作用时,你无法判断什么是坏的。我建议你重新编写代码。不要只有几行代码,而是确定解决问题所需的步骤,每行解决一个步骤。然后,当事情不起作用时,你可以重新编写代码可以测试各行以查看故障发生的位置。我只是不知道(isNumber(I))是如何工作的。它如何查看我的输入是否从末尾算起是数字?我知道如果我输入56+54,则是5,然后是isNumber(5)。我意识到:D isNumber是从0到9的ivedlauktxt,我们观察它是否是数字,然后长度减少1:)我不需要最后一个字符,而是最后一个数字,直到符号*,/,+,-。例如,我输入65+51,当按下sin时,51必须放在sin括号中,结果将是65+sind(51)更新了post以查找结束符,直到第一个非数字。如果只想排除这几个符号,应该很容易更改。不起作用。获取这些错误:| | |和&&运算符的操作数必须可转换为逻辑标量值。Manoskaciiuokle2>按钮40_回调(第355行)中的错误是number=(ivedlauktxt>='0')&(ivedlauktxt已修复,不应使用
&
,只是
&
没有任何更改,sind(只是添加到末尾。我需要如何更改我的行ivedlauktxt=strcat(ivedlauktxt,'sind(');才能使用您的代码?