ABAP 浮点型运算

简介: ABAP函数EVAL_FORMULA计算公式 背景 ABAP实现动态的表达式计算,可以使用函数EVAL_FORMULA实现,参考代码在下面;同时也可以考虑用类CL_JAVA_SCRIPT调用js功能实现。

参考代码
&---------------------------------------------------------------------
& Report YFORMULA_TEST &--------------------------------------------------------------------- &
&---------------------------------------------------------------------
&---------------------------------------------------------------------
& Report YFORMULA &--------------------------------------------------------------------- &
&---------------------------------------------------------------------
report yformula.

data: dataf type f,
datap type lbkum.

parameters: formula(40) default 'ABC*D',
a_val type lbkum default 3,
b_val type lbkum default 1,
c_val type lbkum default 2,
d_val type lbkum default 4.

start-of-selection.

call function 'CHECK_FORMULA'
exporting
formula = formula
program = sy-repid
routine = 'SUB_CHECK_FORMULA'

  • UNIT_OF_MEASURE = ' '
  • IMPORTING
  • FUNCNAME =
  • MESSAGE =
  • POS =
  • SUBRC =
    exceptions
    error_in_formula = 1
    missing_parameter = 2
    others = 3.
    if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno

    with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    

    endif.

    call function 'EVAL_FORMULA'
    exporting
    formula = formula
    program = sy-repid
    routine = 'SUB_GET_VALUE'
    importing
    value = dataf
    exceptions
    division_by_zero = 1
    exp_error = 2
    formula_table_not_valid = 3
    invalid_expression = 4
    invalid_value = 5
    log_error = 6
    parameter_error = 7
    sqrt_error = 8
    units_not_valid = 9
    missing_parameter = 10
    others = 11.

    if sy-subrc <> 0.
    message id sy-msgid type sy-msgty number sy-msgno

    with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
    

    else.

    move dataf to datap.
    write:/ formula, datap.
    endif.

form sub_check_formula using value(name)
CHANGING value(subrc).
subrc = 0.

ENDFORM.

form sub_get_value using value(name)
changing value(value)
value(subrc).
subrc = 0.
value = 0.
case name.
when 'A'.
value = a_val.
when 'B'.
value = b_val.
when 'C'.
value = c_val.
when 'D'.
value = d_val.
endcase.
endform. "VAR_GET

目录
相关文章
|
8月前
|
存储 编译器 C语言
【表达式求值】整型提升和算术转换
【表达式求值】整型提升和算术转换
56 0
|
C语言
C语言:截断+整型提升+算数转换练习
截断+整型提升+算数转换练习
76 0
|
7月前
|
C语言
C语言中的赋值运算、比较运算和逻辑运算详解
C语言中的赋值运算、比较运算和逻辑运算详解
127 0
|
7月前
|
存储 编译器 C语言
【C语言】:整型提升,算术转换与大小端的介绍
【C语言】:整型提升,算术转换与大小端的介绍
57 0
|
8月前
|
存储 Shell C语言
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
【C/C++ 字符串与整型转换函数】探索C语言中的字符串和整型之间的转换函数
92 0
|
8月前
|
存储 物联网 编译器
详解【C语言】类型转换--整型提升,算术
详解【C语言】类型转换--整型提升,算术
126 0
|
存储 机器学习/深度学习 编译器
【C语言】你知道浮点数是怎么存储的吗?(上)
【C语言】你知道浮点数是怎么存储的吗?
125 0
|
存储 编译器 C语言
C语言(二) 补码,运算值与表达式
C语言(二) 补码,运算值与表达式
172 0
|
存储 人工智能 C语言
【C语言】你知道浮点数是怎么存储的吗?(下)
【C语言】你知道浮点数是怎么存储的吗?(下)
108 0
|
C语言 索引
操作符续(整型提升与算术转换)
操作符续(整型提升与算术转换)
95 0