0

我正在 ILE RPG 中寻找一种数字类型,当它溢出时会“环绕”,类似于 C int 的方式。有这样的事吗?

4

3 回答 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 回答