私のプログラムをクラッシュすることなくオーバーフローするILE RPGでの数値型はありますか?

StackOverflow https://stackoverflow.com/questions/1673403

  •  16-09-2019
  •  | 
  •  

質問

私はどのようにCのintは希望と同じように、それがオーバーフローしたときに「ラウンドラップ」しますILE RPGでの数値型を探しています。そのようなことはありますか?

役に立ちましたか?

解決

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)

繰り返しますが、これが最善の手順で行われます。

他のヒント

あなたは固定フォーマット数学演算を使用することができます(div要素、サブ、MULTを追加し、)。オーバーフローが到達したとき、彼らは切り捨てられます。面倒しかし作品ます。

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は、サブシステムで午前15時39分15秒で01/11/11に開始QINTER メッセージキューSPRICEは別のジョブに割り当てられている。
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