Ile RPG에는 내 프로그램을 충돌시키지 않고 오버 플로우가 있습니까?
-
16-09-2019 - |
문제
ILE RPG에서 숫자 유형을 찾고있는 Cint의 방식과 비슷한 방식으로 오버플로 나올 때 "랩"할 것입니다. 그런 것이 있습니까?
해결책
RPG는 그렇게하지 않을 것입니다. 내가 제안 할 수있는 가장 좋은 해결책은 당신을 위해 수학을 수행하고 오버플로를 처리하는 절차를 만드는 것입니다. RPG에는 Truncnbr Compile 옵션 및 제어 사양 키워드가 있지만 특정 시나리오에서만 적용됩니다.
간단한 카운터를 수행하는 경우 다음과 같은 숫자 필드로 데이터 구조를 만들 수 있습니다.
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;
프로그램 메시지 표시
Job 912834/Sprice/DP88LT는 하위 시스템 Qinter Message Queue Sprice에서 15:39:15에 01/11/11에 시작되었습니다.
dsply 현재 값 002
또는 오버플로가 발생하면 오류 코드를 모니터링 할 수 있습니다.
D Counter S 10I 0
/FREE
Monitor;
Counter += 1;
On-Error 103;
Clear Counter;
EndMon;
/END-FREE
제휴하지 않습니다 StackOverflow