Question

Je suis à la recherche d'un type numérique dans RPG ILE qui « wrap rond » quand il déborde, d'une manière similaire à la façon dont un C int serait. Y at-il une telle chose?

Était-ce utile?

La solution

RPG ne vous laissera pas faire. La meilleure solution que je peux suggérer serait de créer une procédure qui fait le calcul pour vous et gère le trop-plein. Alors que RPG a la possibilité de compiler TRUNCNBR et mot-clé spécification de contrôle, il est seulement applicable dans certains scénarios.

Si vous faites un simple compteur, vous pouvez créer une structure de données avec des champs numériques se chevauchent comme ceci:

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

Ensuite, vous ajoutez à WholeCounter puis zéro-out CountOverflow immédiatement après. Dans cet exemple, le compteur est un numéro à 4 chiffres. Vous pouvez faire la même chose avec des champs entiers, mais je vous recommande de les garder non signé:

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

Encore une fois, cela est mieux fait dans une procédure.

Autres conseils

Vous pouvez utiliser les opérations mathématiques format fixe (ajouter, sous, mult et div). Ils tronquer quand débordement est atteint. Lourdeur mais fonctionne.

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;                              

Messages du programme d'affichage

Job 912834 / Sprice / DP88LT a commencé le 01/11/11 à 15:39:15 dans le sous-système QINTER file d'attente de messages Sprice est affecté à un autre emploi.
DSPLY La valeur actuelle 002

Ou vous pouvez suivre le code d'erreur lorsqu'un dépassement se produit:

 D Counter         S             10I 0

  /FREE
   Monitor;
      Counter += 1;
   On-Error 103;
      Clear Counter;
   EndMon;
  /END-FREE
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top