为什么ABAP在使用REDUCE操作符时将数字舍入到最接近的整数?



在下面的代码中,lv_sum_openamount应该是3.45,但程序将其四舍五入为3。

我想让lv_sum_openamount= 3

我该怎么做呢?

DATA(lv_sum_openamount) = REDUCE dmbtr_cs( INIT sum = 0 FOR wa_amnt IN <fs_comp> NEXT sum += wa_amnt-open_amount.
LOOP AT <fs_comp> ASSIGNING <fs_comp_alv>.
TRY.
<fs_comp_alv>-pull_amount = ( <fs_pack>-reamount / lv_sum_openamount ) * <fs_comp_alv>-open_amount.
CATCH cx_sy_zerodivide.
<fs_comp_alv>-pull_amount = 0.
ENDTRY.
ENDLOOP.

元凶是INIT sum = 0部件。

0是一个整数,因此sum的类型自动派生为一个整数。这意味着REDUCE-循环随后使用整数运算,因此其输出将被舍入。

试试INIT sum = CONV dmbtr_cs( 0 )。这将把0的字面值转换为您需要的类型,并反过来强制sum也获得该类型。

最新更新