par Mike Cravitz
Effectuer des calculs arithmétiques sur des données à la compilation et sur des champs de type décimal zoné, entier et à virgule flottante.
Dans « Traitement des données numériques définies à l'exécution en RPG IV, 1re partie », je montrais comment traiter des données numériques contenues dans des champs caractères.
Ici, je montre comment effectuer des opérations arithmétiques sur des champs packés à la compilation (compile time), quand il faut stocker le résultat dans un champ packé à l'exécution (runtime). J'explique également comment effectuer des calculs arithmétiques avec d'autres types de champs numériques à l'exécution, y compris des champs en décimal zoné, entier et virgule flottante.
Retrouvez les figures dans l'édition papier : n°12 - novembre 2001
On peut utiliser quatre procédures pour se livrer à des calculs arithmétiques avec des données packées au format thirty : pAddThirtyFmt, pSub-ThirtyFmt, pMultThirtyFmt et pDiv-ThirtyFmt. Ces quatre procédures réunies aux procédures pCnvToThirtyFmt et pCnvFromThirtyFmt, procurent un jeu complet d’outils pour effectuer des calculs arithmétiques sur des données au format Thirty. Les quatre procédures effectuent l’addition, la soustraction, la multiplication, ou la division entre deux valeurs de format Thirty et placent le résultat dans une valeur de format Thirty. Les prototypes des quatre procédures sont identiques à l’exception des noms de procédures. La figure 1 montre le prototype de la procédure pAddThirtyFmt. Num1_30-0, Num1_30-30, Num2_30-0, et Num2_30-30 sont les valeurs packées au format Thirty à ajouter (ou soustraire, multiplier ou diviser dans le cas des procédures pSubThirtyFmt, pMultThirtyFmt, et pDivThirtyFmt). Le paramètre suivant, ResultDecimals, est le nombre de décimales que l’on veut dans le résultat. Pour pAddThirtyFmt et pSubThirtyFmt, dans de nombreux cas, on codera ce paramètre comme étant le nombre maximum de décimales dans la donnée originale (format non Thirty). Ainsi, si l’on ajoute deux champs packés et si l’on constate à l’exécution que l’un d’eux a deux positions décimales et que l’autre en a trois, on indique trois pour ResultDecimals. Mais ce n’est pas toujours le cas ; cela dépend simplement de vos besoins. Dans certains cas, on ne voudra que deux chiffres à droite de la virgule, comme pour des francs et des centimes. Dans le cas de la multiplication et de la division, il faut faire très attention à ce paramètre.
Quand on utilise la procédure pMultThirtyFmt pour multiplier et que les données originales multipliées ont deux et trois chiffres décimaux, le résultat aura jusqu’à cinq chiffres décimaux. Result_30_0 et Result_30_30 sont des paramètres de sortie au format Thirty de ces quatre procédures arithmétiques.
RoundFlg est un champ indicateur qui dit à la procédure s’il faut arrondir le résultat. Si l’on passe *On comme paramètre de RoundFlg, la procédure arrondit le résultat ; si l’on passe *Off, la procédure n’arrondit pas le résultat. Ce paramètre est facultatif : en son absence, la procédure ne fait pas l’arrondi. Quand on travaille avec des opérandes arithmétiques comme ceux utilisés dans ces procédures, il se peut que le compilateur RPG IV refuse d’arrondir le résultat, par suite d’un bogue. IBM a corrigé ce problème dans la V4R4 et la V4R5 avec PTF SF63705.
Téléchargez cette ressource
Guide inmac wstore pour l’équipement IT de l’entreprise
Découvrez les dernières tendances et solutions IT autour des univers de Poste de travail, Affichage et Collaboration, Impression et Infrastructure, et notre dossier Green IT sur les actions engagés par inmac wstore pour réduire son impact environnemental