Gibt es einen numerischen Typ in ILE RPG, das ohne Absturz mein Programm überläuft?

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

  •  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?

War es hilfreich?

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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top