0

我有多个按钮 0 到 9 以及其他计算方法,如加号、减号等

有两个显示项目,MemoryDisplayMemory项目被隐藏。

单击按钮时,在项目1中显示值 1 。Display单击+按钮时,将值 1 存储在Memory项目中。单击=按钮时,然后添加Memory+值并在项目Display上显示答案。Display

问题是如何在等于=按钮中编写多个计算?

4

2 回答 2

3

您有三个寄存器:单击的按钮、显示值和内存值。所以计算字符串2+3=5看起来像这样:

button Display Memory 
     2       2
     +       2      2
     3       3      2
     =       5      5

据我了解您的问题,您希望处理更长的计算,例如当用户在几个步骤中键入而不按=2+3+7/4*5=。有几种方法可以做到这一点,但对用户来说最直观的一种是将算术运算符视为具有隐式=运算,计算运行总和并显示该值。

button Display Memory 
     2       2
     +       2      2
     3       3      2
     +       5      5
     7       7      5
     /      12     12
     4       4     12
     *       3      3
     5       5      3
     =      15     15

要完成这项工作,您需要另一个注册项目来跟踪当前操作员。

button Display Memory Operator
     2       2       
     +       2      2        +
     3       3      2        +
     +       5      5        +
     7       7      5        +
     /      12     12        /
     4       4     12        /
     *       3      3        *
     5       5      3        * 
     =      15     15        =

因此,当用户单击触发按钮时,您会执行如下操作:

if :operator = '+' then
    :memory := :memory + :display;
elsif :operator = '-' then
    :memory := :memory - :display;
elsif :operator = '/' then
    :memory := :memory / :display;
elsif :operator = '*' then
    :memory := :memory * :display;
end if;
:display := :memory;
:operator := :button_value;

当用户连续键入两个操作时,您需要决定如何处理这种情况,例如+/。但可能你也需要跟踪以前的按钮按下。

那么这样做的目的是=什么?好吧,这取决于用户接下来输入的内容。如果他们跟随=另一个运算符,那么它只是一个小计并且总和继续......

button Display Memory 
     2       2
     +       2      2
     3       3      2
     =       5      5
     +       2      5  <-- continue with existing sum
     =       7      7  

...但是如果他们跟着一个数字,那么我们开始一个新的总和,我们重置内存:

button Display Memory 
     2       2
     +       2      2
     3       3      2
     =       5      5
     2       2         <-- start a new sum
     +       2      2
     2       2      2
     =       4      4     
于 2018-03-20T08:30:36.067 回答
0

创建一个如下所示的函数。

create or replace function calculate(p_input VARCHAR2) RETURN VARCHAR2
IS
   v_output VARCHAR2(20);
   missing_expression EXCEPTION;
   invalid_identifier EXCEPTION;
   PRAGMA EXCEPTION_INIT(missing_expression, -936);
   PRAGMA EXCEPTION_INIT(invalid_identifier, -904);
BEGIN
   EXECUTE IMMEDIATE 'SELECT '||p_input||' FROM dual' INTO v_output;
   RETURN v_output;
EXCEPTION
   WHEN VALUE_ERROR OR MISSING_EXPRESSION OR INVALID_IDENTIFIER THEN
       RETURN 'ERROR';
END;
/

SQL 中的示例使用,

SELECT CAST(CALCULATE('1+2-3+4+5') AS VARCHAR2(20)) output 
  FROM dual;

在 Oracle 表单中,

:block.io_display_item := CAST(CALCULATE(:block.io_display_item) AS VARCHAR2(20));
于 2018-03-21T02:44:25.770 回答