Pregunta

Estoy buscando un tipo numérico en ILE RPG que "saltará" cuando se desborda, de una manera similar a como un int C haría. ¿Existe tal cosa?

¿Fue útil?

Solución

RPG no va a dejar que hagas eso. La mejor solución que puedo sugerir sería la creación de un procedimiento que hace los cálculos para usted y maneja el desbordamiento. Mientras RPG tiene la opción de compilación TRUNCNBR y el control de palabras clave de especificaciones, sólo es aplicable en ciertos escenarios.

Si estás haciendo un simple contador, puede crear una estructura de datos con la superposición de los campos numéricos como esto:

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

A continuación, añadir a WholeCounter y luego cero a cabo CountOverflow inmediatamente después. En este ejemplo, contador es un número de 4 dígitos. Usted puede hacer lo mismo con los campos de enteros, pero recomiendo que mantenerlos sin firmar:

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

Una vez más, esto se hace mejor en un procedimiento.

Otros consejos

Puede utilizar las operaciones matemáticas de formato fijo (añadir, submarino, mult y div). Ellos se truncará cuando se alcanza desbordamiento. Engorroso, pero 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;                              

Los mensajes programa de visualización

Trabajo 912834 / Sprice / DP88LT comenzó el 01/11/11 a las 15:39:15 en QINTER subsistema Sprice cola de mensajes es asignado a otro puesto de trabajo.
DSPLY El valor actual 002

O se podría controlar para el código de error cuando ocurre un desbordamiento:

 D Counter         S             10I 0

  /FREE
   Monitor;
      Counter += 1;
   On-Error 103;
      Clear Counter;
   EndMon;
  /END-FREE
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top