Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math REDUCE运算符中的小数精度_Math_Abap - Fatal编程技术网

Math REDUCE运算符中的小数精度

Math REDUCE运算符中的小数精度,math,abap,Math,Abap,在我下面的代码中,我将sum和lt_req-dmbtr声明为dmbtr,但在输出中它没有显示十进制值,并且输出也比预期值少2或3个符号 DATA(total) = REDUCE dmbtr( INIT sum = 0 FOR wa IN lt_req WHERE ( gsber = <fs_ba_det>-gsber AND gjahr = 2020 ) NEXT sum = sum + conv dmbtr( wa-dmbtr ) ). DATA(total)=减少dmbt

在我下面的代码中,我将
sum
lt_req-dmbtr
声明为
dmbtr
,但在输出中它没有显示十进制值,并且输出也比预期值少2或3个符号

DATA(total) = REDUCE dmbtr( INIT sum = 0  FOR wa IN lt_req WHERE ( gsber = <fs_ba_det>-gsber AND gjahr = 2020 ) NEXT sum = sum + conv dmbtr( wa-dmbtr )   ).
DATA(total)=减少dmbtr(lt_req中wa的初始总和=0,其中(gsber=-gsber和gjahr=2020)下一个总和=sum+conv dmbtr(wa dmbtr))。
有时它会阻止错误的发生

CX_SY_算术_溢出


这里的
sum
变量类型是限定的,而不是从中转换的
wa-dmbtr

摘自帮助:

INIT之后的声明创建局部变量x1、x2

在完全求值之后,根据赋值规则将第一变量x1的内容或第一字段符号指向的存储区域赋值给类型类型表达式的临时结果

在你的代码片段中,你的
是零,所以它是整数,它限制了所有其他类型

要达到您的要求,请使用正确的REDUCE格式:

TYPES:
  BEGIN OF ty_product,
    product TYPE char10,
    price   TYPE dmbtr,
    group   TYPE char10,
  END OF ty_product,
  tt_products TYPE STANDARD TABLE OF ty_product WITH EMPTY KEY.

DATA(t_prod) =
  VALUE tt_products(
    ( product = 'C0001' price = '1.005'     group = 'commodities' )
    ( product = 'C0002' price = '245.48575' group = 'crude' )
    ( product = 'C0003' price = '500.05'    group = 'crude' )
    ( product = 'C0004' price = '32'        group = 'commodities' )
  ).

DATA(total) = REDUCE dmbtr( INIT sum = CONV dmbtr( 0 ) FOR wa IN t_prod WHERE ( group = 'crude' ) NEXT sum = sum + wa-price ).

WRITE total.

这将导致745.53575

注意
INIT sum TYPE dmbtr
相当于
INIT sum=CONV dmbtr(0)
公平点,桑德拉