我正在 ILE RPG 中寻找一种数字类型,当它溢出时会“环绕”,类似于 C int 的方式。有这样的事吗?
问问题
607 次
3 回答
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)
同样,这最好在程序中完成。
于 2009-11-04T13:35:40.013 回答
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;
显示程序消息
作业 912834/SPRICE/DP88LT 于 2011 年 1 月 11 日 15:39:15 在子系统 QINTER 中开始 消息队列 SPRICE 被分配给另一个作业。
DSPLY 当前值 002
于 2011-01-11T21:42:07.597 回答
2
或者您可以在发生溢出时监视错误代码:
D Counter S 10I 0
/FREE
Monitor;
Counter += 1;
On-Error 103;
Clear Counter;
EndMon;
/END-FREE
于 2010-01-28T13:49:29.973 回答