我正在 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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top