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)
公平点,桑德拉