我正在寻找ILE RPG中的数字类型,它会在溢出时“回绕”,类似于C int的方式。有这样的事吗?
答案 0 :(得分:3)
RPG不会让你这样做。我可以建议的最佳解决方案是创建一个为您完成数学运算并处理溢出的过程。虽然RPG确实具有TRUNCNBR编译选项和控制规范关键字,但它仅适用于某些情况。
如果你正在做一个简单的计数器,你可以创建一个具有重叠数字字段的数据结构,如下所示:
DCounterDS DS
D Counter 5 8 0
D CountOverflow 1 4 0
D WholeCounter 1 8 0 INZ(0)
然后添加到WholeCounter,然后立即将CountOverflow清零。在此示例中,Counter是一个4位数字。您可以使用整数字段执行相同的操作,但我建议您将它们保留为无符号:
DCounterDS DS
D Counter 5 8U 0
D CountOverflow 1 4U 0
D WholeCounter 1 8U 0 INZ(0)
同样,这最好在程序中完成。
答案 1 :(得分:3)
您可以使用固定格式的数学运算(add,sub,mult和div)。它们将在达到溢出时截断。繁琐但有效。
0001.00 D Fld1 s 3 0
0001.01 D
0002.00 C 999 add 3 Fld1
0003.00 /free
0004.00 dsply ('The current value '+%editc(Fld1:'X'));
0005.00 *inlr=*on;
0006.00 return;
显示节目信息
Job 912834 / SPRICE / DP88LT于01/11/11 15:39:15在子系统QINTER上开始 消息队列SPRICE被分配给另一个作业 DSPLY当前值002
答案 2 :(得分:2)
或者您可以在发生溢出时监视错误代码:
D Counter S 10I 0
/FREE
Monitor;
Counter += 1;
On-Error 103;
Clear Counter;
EndMon;
/END-FREE