Aller au contenu

Code opération RPG III / RPG/400 · IBM i (AS/400) · Calculs

Z-ADD

Mettre à zéro et ajouter

Met la zone résultat à zéro puis lui ajoute le facteur 2 : c'est l'affectation numérique, et elle définit la zone par sa longueur et ses décimales.

Syntaxe

     C                     Z-ADDfacteur2  result  72
     C                     Z-ADDfacteur2  result  72H
Facteur 1 (18-27)
Toujours vide.
Facteur 2 (33-42)
La valeur à ranger : zone numérique ou littéral.
Zone résultat (43-48)
Reçoit la valeur ; l'ancienne valeur est écrasée.
Longueur (49-51)
Longueur totale de la zone résultat, décimales comprises. Renseignée quand la zone apparaît pour la première fois dans le programme : c'est ce qui la définit. Sans longueur, une zone encore inconnue provoque QRG7030, « La zone ou l'indicateur n'est pas défini ».
Décimales (52)
Nombre de décimales de la zone résultat ; 0 pour un entier.
Colonne 53
H demande l'arrondi (demi supérieur) : si le résultat a plus de décimales que la zone résultat, le résultat est arrondi à la valeur la plus proche (1,09945 devient 1,10 pour deux décimales). Sans H, les décimales en trop sont simplement coupées, sans arrondi.
Indicateurs de conditionnement (9-17)
Facultatif : l'opération n'est exécutée que si les indicateurs indiqués ont l'état demandé.
Effet
La zone résultat vaut le facteur 2, ramené à sa longueur et à ses décimales : décimales en trop coupées, chiffres de gauche en trop perdus, sans erreur.

À quoi ça sert

Z-ADD est l'affectation numérique de tous les programmes RPG III : initialiser un compteur (Z-ADD 0 COMPT), recopier un solde, préparer une clé de lecture. Comme c'est souvent la première mention d'une zone, on y place la longueur et les décimales : c'est la façon de déclarer une variable numérique en RPG III.

Exemple 1 : Initialiser et recopier

     H*  Z-ADD : initialiser une zone; definition par longueur et decimales
     C                     Z-ADD0         COMPT   50
     C                     Z-ADD1250.5    SOLDE   92
     C                     Z-ADDSOLDE     COPIE   92
     C           'Compteur'DSPLY
     C           COMPT     DSPLY
     C           'Solde'   DSPLY
     C           SOLDE     DSPLY
     C           'Copie'   DSPLY
     C           COPIE     DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

Compteur
    0
Solde
   125050
Copie
   125050

Les trois Z-ADD définissent COMPT (5 chiffres), SOLDE et COPIE (9 chiffres dont 2 décimales). 1250,5 range 125050 (1250,50) ; COPIE reçoit la même valeur.

Exemple 2 : Troncature à droite et à gauche

     H*  Z-ADD : troncature a gauche et a droite
     C                     Z-ADD123.456   TAUX    52
     C           'Taux'    DSPLY
     C           TAUX      DSPLY
     C                     Z-ADD123456    PETIT   30
     C           'Petit'   DSPLY
     C           PETIT     DSPLY
     C                     SETON                     LR

Résultat réel, compilé par CRTRPGPGM et exécuté sur IBM i 7.5 :

Taux
12345
Petit
456

123,456 rangé dans une zone à 2 décimales donne 12345 (123,45) : la décimale perdue n'est pas arrondie. 123456 rangé dans une zone de 3 chiffres donne 456 : les chiffres de gauche sont perdus. Aucune erreur dans les deux cas.

Le piège

La zone décide de la précision, pas la valeur. Un littéral à 3 décimales dans une zone à 2 décimales est coupé (deuxième exemple), et une valeur trop grande est tronquée à gauche (456 au lieu de 123456) sans message. Dimensionnez la zone avant de l'utiliser.

Le littéral décimal s'écrit avec un point (1250.5).

En RPG ILE full free

En RPG ILE full free, c'est une simple affectation sur une zone déclarée par DCL-S ; EVAL(H) arrondit.

dcl-s compt packed(5: 0);
dcl-s solde packed(9: 2);
compt = 0;
solde = 1250.5;
copie = solde;