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
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 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;