math - REDUCE 运算符中的小数位精度
问题描述
在下面的代码中,我声明了sum
and lt_req-dmbtr
as 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 ) ).
有时它会引发错误
CX_SY_ARITHMETIC_OVERFLOW
解决方案
sum
变量类型在这里是限定的,而不是你wa-dmbtr
转换的。
摘自REDUCE帮助:
INIT 之后的声明创建局部变量 x1, x2 ...
完整求值后,按照赋值规则将第一个变量x1的内容或第一个字段符号指向的内存区域 赋值给type类型表达式的临时结果。
在您的代码段中,您sum
的值为零,因此它是 Integer 并且它限制了所有其他类型。
满足您要求的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。
推荐阅读
- python - 对于具有一列键和一列值的 pandas 数据框,制作另一列字典
- c# - 从 dotnet Core 2.2.6 更改为 3.0.0 后出现 EF Linq 错误
- scala - 如何将 Seq[Try] 转换为 Try[Seq]
- authentication - Office 365 OAuth2登录认证如何实现跨域请求?
- javascript - 将多个产品和数量添加到 Prestashop 的购物车
- android - 如何在Android中以正确的方式通过多次观察来观察实时数据?
- android - 如何使用 DispatchingAndroidInjector 注入 android 应用程序类
在匕首 2 - sql-server - 自动将 CSV 文件导入 SQL Server
- sql - 当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。SQL
- ios - 如何在 iOS 13 中调暗状态栏