C'è un tipo numerico in RPG ILE, che traboccherà senza schiantarsi mio programma?

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

  •  16-09-2019
  •  | 
  •  

Domanda

Sto cercando un tipo numerico in RPG ILE che "wrap rotonda" quando trabocca, in maniera simile a come un int C avrebbe fatto. C'è una cosa simile?

È stato utile?

Soluzione

RPG non ti consente di farlo. La soluzione migliore che posso suggerire sarebbe quello di creare una procedura che fa la matematica per voi e gestisce l'overflow. Mentre RPG ha la possibilità TRUNCNBR compilazione e controllo specifiche parole chiave, è applicabile solo in determinati scenari.

Se stai facendo un semplice contatore, è possibile creare una struttura dati con sovrapposizione campi numerici in questo modo:

DCounterDS        DS                        
D Counter                 5      8  0       
D CountOverflow           1      4  0       
D WholeCounter            1      8  0 INZ(0)

quindi si aggiunge a WholeCounter e poi zero out CountOverflow subito dopo. In questo esempio, Counter è un numero a 4 cifre. Si può fare la stessa cosa con campi di numeri interi, ma vi consiglio di tenerli senza segno:

DCounterDS        DS                        
D Counter                 5      8U 0       
D CountOverflow           1      4U 0       
D WholeCounter            1      8U 0 INZ(0)

Ancora una volta, questo è meglio farlo in una procedura.

Altri suggerimenti

È possibile utilizzare le operazioni matematiche formato fisso (aggiungere, sub, Mult, e div). Saranno troncare al raggiungimento di overflow. Ingombrante ma funziona.

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;                              

I messaggi di visualizzazione del programma

Job 912.834 / Sprice / DP88LT iniziata il 01/11/11 alle 15:39:15 nel sottosistema QINTER coda di messaggi Sprice è assegnato a un altro lavoro.
DSPLY Il valore corrente 002

In alternativa è possibile monitorare per il codice di errore quando si verifica un overflow:

 D Counter         S             10I 0

  /FREE
   Monitor;
      Counter += 1;
   On-Error 103;
      Clear Counter;
   EndMon;
  /END-FREE
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top