Pergunta

Eu estou procurando um tipo numérico em ILE RPG que irá "wrap round" quando transborda, de uma forma semelhante à forma como um int C faria. Existe tal coisa?

Foi útil?

Solução

RPG não vai deixar você fazer isso. A melhor solução que pode sugerir seria a criação de um procedimento que faz a matemática para você e lida com o transbordamento. Enquanto RPG tem a opção TRUNCNBR compilação e controle chave spec, que é aplicável apenas em determinados cenários.

Se você está fazendo um contador simples, você pode criar uma estrutura de dados com sobreposição de campos numéricos como esta:

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

Em seguida, você adicionar a WholeCounter e depois de zero-out CountOverflow imediatamente depois. Neste exemplo, contador é um número de 4 dígitos. Você pode fazer a mesma coisa com campos inteiros, mas eu recomendo que você mantê-los sem sinal:

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

Mais uma vez, este é o melhor feito em um procedimento.

Outras dicas

Você pode usar as operações matemáticas formato fixo (add, sub, mult, e div). Eles irão truncar quando estouro é atingido. Complicado, mas funciona.

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;                              

As mensagens de exibição do programa

Job 912.834 / Sprice / DP88LT começou em 01/11/11 às 15:39:15 em QINTER subsistema fila de mensagens Sprice é alocado para outro emprego.
DSPLY O valor atual 002

Ou você pode monitorar para o código de erro quando um estouro acontece:

 D Counter         S             10I 0

  /FREE
   Monitor;
      Counter += 1;
   On-Error 103;
      Clear Counter;
   EndMon;
  /END-FREE
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top