问题背景
在很多标准程序debug的时候经常发现加减乘除的计算结果不对,比如5+9.5 = 100 这个计算想来想去都不知道什么原因,然后我要在增强中写个计算的校验,怎么写计算结果都不对。我该如何解决?
了解固定点计算
按照官方的解释:虽然很详细但是没怎么看懂。
不过我们ABAPer 一般创建程序的时候都会打上这个勾:
例子
如果不勾选这个勾,看看计算结果会变成什么样子:
代码实例
"不勾选固定点计算
DATA:lv_num1 TYPE char4,
lv_num2 TYPE char4,
lv_res TYPE char4.
"计算除法
lv_num1 = '9'.
lv_num2 = '3'.
lv_res = lv_num1 / lv_num2 .
WRITE:/ lv_num1 && '/' && lv_num2 && '=' && lv_res.
"计算除法
lv_num1 = '9'.
lv_num2 = '3.0'.
lv_res = lv_num1 / lv_num2 .
WRITE:/ lv_num1 && '/' && lv_num2 && '=' && lv_res.
"计算 5 + 95
lv_num1 = '5'.
lv_num2 = '95'.
lv_res = lv_num1 + lv_num2 .
WRITE:/ lv_num1 && '+' && lv_num2 && '=' && lv_res.
"计算 5+ 9.5
CLEAR:lv_num1, lv_num2,lv_res.
lv_num1 = '5'.
lv_num2 = '9.05'.
lv_res = lv_num1 + lv_num2 .
WRITE:/ lv_num1 && '+' && lv_num2 && '=' && lv_res.
CLEAR:lv_num1, lv_num2,lv_res.
lv_num1 = '5'.
lv_num2 = '9.5'.
lv_res = lv_num1 + lv_num2 .
WRITE:/ lv_num1 && '+' && lv_num2 && '=' && lv_res.
"调用函数计算
CLEAR:lv_num1, lv_num2,lv_res.
lv_num1 = '5'.
lv_num2 = '9.5'.
CALL FUNCTION 'ZFM_SD_ADD' "自定义的函数:里面代码逻辑就是 加法计算
EXPORTING
i_zyfk = lv_num1
i_ztlk = lv_num2
i_zdhk = '0'
i_zazjgk = '0'
i_zsbtyk = '0'
i_zzbk = '0'
IMPORTING
e_he = lv_res.
WRITE:/'调用函数' && lv_num1 && '+' && lv_num2 && '=' && lv_res.
然后看执行结果
发现其中的结果有时候对,有时候不对。
而我如果调用了勾选固定点计算的函数的计算结果是对的
结论总结
1.标准程序(未勾选固定点计算的标准程序)增强中如果有计算结果不对的情况,请调用自定义的函数进行计算。
2.如果发现自定义报表的计算结果不对,可以检查下程序属性中的固定点计算 的勾,有没有勾上。