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

目录
相关文章
|
7月前
|
编译器 C语言
C语言中整数如何自动转换为浮点数
C语言中整数如何自动转换为浮点数
430 0
|
C语言
C语言:截断+整型提升+算数转换练习
截断+整型提升+算数转换练习
73 0
|
6月前
|
Go
go算数运算、关系运算、布尔运算、位运算
go算数运算、关系运算、布尔运算、位运算
|
7月前
|
存储 物联网 编译器
详解【C语言】类型转换--整型提升,算术
详解【C语言】类型转换--整型提升,算术
113 0
|
7月前
|
编译器 C语言 C++
整形提升和算数转换
整形提升和算数转换
45 0
|
C语言
【C语言】数据类型的大小(没有浮点)
【C语言】数据类型的大小(没有浮点)
75 0
【C语言】数据类型的大小(没有浮点)
|
存储 编译器 C语言
C语言/整型和浮点数在内存中的存储
C语言/整型和浮点数在内存中的存储
|
Python
python中整型与浮点型的数值转换
python中整型与浮点型的数值转换
284 0
|
C语言 索引
操作符续(整型提升与算术转换)
操作符续(整型提升与算术转换)
88 0
|
存储 算法 编译器
你是真的“C”——操作符详解【下篇】+整形提升+算术转换
详解C语言中操作符+算术转换+整形提升知识点~
178 1
你是真的“C”——操作符详解【下篇】+整形提升+算术转换