Aller au contenu

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

MULT

Multiplier

Multiplie le facteur 1 par le facteur 2 dans la zone résultat ; sans facteur 1, multiplie la zone résultat par le facteur 2.

Syntaxe

     C           facteur1  MULT facteur2  result  72
     C                     MULT facteur2  result  72
     C           facteur1  MULT facteur2  result  72H
Facteur 1 (18-27)
Premier facteur. Facultatif : s'il est absent, la zone résultat est multipliée (result = result × facteur 2).
Facteur 2 (33-42)
Second facteur : zone numérique ou littéral (décimaux avec un point : 0.055).
Zone résultat (43-48)
Reçoit le produit.
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 contient le produit, calculé exactement puis ramené à la longueur et aux décimales de la zone : décimales en trop coupées (ou arrondies avec H), chiffres de gauche en trop perdus sans erreur.

À quoi ça sert

MULT sert aux montants (quantité × prix), aux taux (TVA, remise) et aux conversions. Le produit de deux nombres à 2 décimales en a 4 : il faut décider si l'on coupe ou si l'on arrondit à la zone résultat, et c'est le rôle de la colonne 53.

Exemple 1 : Total et arrondi H

     H*  MULT : quantite par prix; arrondi H en colonne 53
     C                     Z-ADD19.99     PRIX    52
     C                     Z-ADD3         QTE     30
     C           PRIX      MULT QTE       TOTAL   72
     C           'Total'   DSPLY
     C           TOTAL     DSPLY
     C           PRIX      MULT 0.055     TVA     52
     C           PRIX      MULT 0.055     TVAH    52H
     C           'Sans H'  DSPLY
     C           TVA       DSPLY
     C           'Avec H'  DSPLY
     C           TVAH      DSPLY
     C                     SETON                     LR

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

Total
   5997
Sans H
  109
Avec H
  110

19,99 × 3 = 59,97 (5997). La TVA de 5,5 % sur 19,99 vaut 1,09945 : sans H la zone à 2 décimales garde 109 (1,09), avec H en colonne 53 elle arrondit à 110 (1,10).

Exemple 2 : Deux opérandes et troncature

     H*  MULT : forme a deux operandes et troncature
     C                     Z-ADD250       MONTAN  72
     C                     MULT 1.2       MONTAN
     C           'Majore'  DSPLY
     C           MONTAN    DSPLY
     C                     Z-ADD600       NB      30
     C                     MULT 3         NB
     C           'Zone 3'  DSPLY
     C           NB        DSPLY
     C                     SETON                     LR

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

Majore
  30000
Zone 3
800

MULT 1.2 MONTAN majore le montant de 20 % en place : 250,00 devient 300,00 (30000). Plus bas, 600 × 3 = 1800 est rangé dans une zone de 3 chiffres : il reste 800, sans erreur.

Le piège

Sans H, l'arrondi n'existe pas : 1,09945 devient 1,09, jamais 1,10. Pour un calcul de TVA ou de remise facturé, mettez H, sinon vos centimes divergent de ceux de la calculette.

Le dépassement de capacité n'est pas signalé (second exemple : 1800 devient 800). Prévoyez des zones assez longues pour le plus grand produit.

En RPG ILE full free

En RPG ILE full free, on écrit une expression ; l'arrondi demande la fonction %DECH (ou EVAL(H)).

total = prix * qte;
tva = %dech(prix * 0.055: 5: 2);
eval(h) tvah = prix * 0.055;
montan *= 1.2;