Gibt es einen numerischen Typ in ILE RPG, das ohne Absturz mein Programm überläuft?
-
16-09-2019 - |
Frage
Ich suche einen numerischen Typen in ILE RPG, die „umwickeln“, wenn er überläuft, in einer ähnlichen Art und Weise, wie ein C int würde. Gibt es so etwas?
Lösung
RPG lassen Sie nicht das tun. Die beste Lösung kann ich vorschlagen würde, ein Verfahren zu schaffen, die die Mathematik für Sie tut und übernimmt den Überlauf. Während RPG die TRUNCNBR Kompilierung Option und Steuer spec Stichwort hat, es ist nur anwendbar in bestimmten Szenarien.
Wenn Sie einen einfachen Zähler tun, können Sie mit überlappenden numerischen Feldern wie diese eine Datenstruktur erstellen:
DCounterDS DS
D Counter 5 8 0
D CountOverflow 1 4 0
D WholeCounter 1 8 0 INZ(0)
Dann fügen Sie WholeCounter und dann Null-out CountOverflow unmittelbar danach. In diesem Beispiel wird der Zähler eine 4-stellige Nummer. Sie können die gleiche Sache mit Integer-Felder tun, aber ich empfehle Ihnen, sie halten ohne Vorzeichen:
DCounterDS DS
D Counter 5 8U 0
D CountOverflow 1 4U 0
D WholeCounter 1 8U 0 INZ(0)
Auch dies ist am besten in einem Verfahren durchgeführt.
Andere Tipps
Sie mathematische Operationen die festen Format verwenden können (hinzufügen, sub, mult und div). Sie werden gestutzt, wenn Überlauf erreicht wird. Umständliche aber funktioniert.
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;
Anzeige Programmmeldungen
Job 912.834 / Sprice / DP88LT begann am 01.11.11 bei 15.39.15 in Subsystem QINTER
Message Queue Sprice wird auf einen anderen Arbeitsplatz zugeordnet.
DSPLY Der aktuelle Wert 002
Oder Sie könnten für den Fehlercode überwachen, wenn ein Überlauf passiert:
D Counter S 10I 0
/FREE
Monitor;
Counter += 1;
On-Error 103;
Clear Counter;
EndMon;
/END-FREE