ILE RPG 中是否有一种数字类型可以溢出而不会使我的程序崩溃?
-
16-09-2019 - |
题
我正在 ILE RPG 中寻找一种数字类型,它在溢出时会“环绕”,类似于 C int 的方式。有这样的事吗?
解决方案
RPG不会让你做到这一点。我建议最好的解决方案是创建一个具有数学为您和处理溢出的过程。虽然RPG确实有TRUNCNBR编译选项和控制规范关键字,它仅适用于某些情况下。
如果你正在做一个简单的计数器,你可以创建一个数据结构重叠数字字段是这样的:
DCounterDS DS
D Counter 5 8 0
D CountOverflow 1 4 0
D WholeCounter 1 8 0 INZ(0)
然后添加到WholeCounter,然后零出CountOverflow随即。在这个例子中,计数器是一个4位数字。你可以做整场同样的事情,但我建议你让他们签名:
DCounterDS DS
D Counter 5 8U 0
D CountOverflow 1 4U 0
D WholeCounter 1 8U 0 INZ(0)
再次,这是最好在过程完成。
其他提示
您可以使用固定格式的数学运算(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于11/11/11/11启动,在子系统Qinter消息队列队列sprice中的15:39:15分配给另一个工作。
DSPLY 当前值 002
或者你可以监视错误代码时,溢出发生什么:
D Counter S 10I 0
/FREE
Monitor;
Counter += 1;
On-Error 103;
Clear Counter;
EndMon;
/END-FREE
不隶属于 StackOverflow