我有多个按钮0到9以及其他计算方法,如加号,减号等
有两个显示项Memory
和Display
; <{1}}项目已隐藏。
单击Memory
按钮,然后在1
项目中显示值1。单击Display
按钮,然后将值1存储在+
项目中。点击Memory
按钮,然后添加=
+ Memory
值并在Display
项目上显示答案。
问题是如何将多个计算编码为等于Display
按钮?
答案 0 :(得分: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
答案 1 :(得分: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));