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
Hdemande 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). SansH, 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;