ILE RPG中是否有数字类型会溢出而不会导致程序崩溃?

时间:2009-11-04 12:08:31

标签: ibm-midrange rpgle rpg

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

3 个答案:

答案 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