私のプログラムをクラッシュすることなくオーバーフローするILE RPGでの数値型はありますか?
-
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
所属していません StackOverflow