oracle 表单计算器中等于'='的代码?
code for equal to '=' in oracle forms calculator?
我有多个按钮 0 到 9 和其他计算方法,如加号、减号等
有两个显示项,Memory
和Display
; Memory
项已隐藏。
当点击1
按钮时,在Display
项中显示值1。单击 +
按钮时,将值 1 存储在 Memory
项中。当单击 =
按钮时,然后添加 Memory
+ Display
值并在 Display
项上显示答案。
问题是如何在等于 =
按钮中编写多重计算代码?
你有三个寄存器:点击的按钮,显示值和记忆值。所以计算字符串 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
创建如下函数。
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));
我有多个按钮 0 到 9 和其他计算方法,如加号、减号等
有两个显示项,Memory
和Display
; Memory
项已隐藏。
当点击1
按钮时,在Display
项中显示值1。单击 +
按钮时,将值 1 存储在 Memory
项中。当单击 =
按钮时,然后添加 Memory
+ Display
值并在 Display
项上显示答案。
问题是如何在等于 =
按钮中编写多重计算代码?
你有三个寄存器:点击的按钮,显示值和记忆值。所以计算字符串 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
创建如下函数。
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));