%INTH
Convertir en entier avec arrondi
Comme %INT, mais la valeur est arrondie à l'entier le plus proche (le demi va vers le haut en valeur absolue).
Syntaxe
%INTH(expression)
expression- Un nombre, une expression numérique ou une zone caractère contenant un nombre.
- Résultat
- Un entier signé. 12,49 donne 12, 12,50 donne 13, -12,50 donne -13.
À quoi ça sert
Quand un résultat décimal doit devenir un nombre entier d'unités (des heures facturées, des colis, des pages), l'arrondi à l'entier le plus proche est souvent le bon choix. %INTH évite d'ajouter 0,5 à la main, ce qui ne fonctionne d'ailleurs pas pour les négatifs.
Exemple 1 : Arrondi et troncature côte à côte
**free
// %INTH : entier ARRONDI (demi vers le haut en valeur absolue) contre %INT qui tronque.
ctl-opt dftactgrp(*no) actgrp(*new);
dcl-s a packed(7:2) inz(12.50);
dcl-s b packed(7:2) inz(-12.50);
dcl-s c packed(7:2) inz(12.49);
dcl-s poids float(8) inz(1234.5678);
dcl-s duree packed(7:2) inz(90);
snd-msg '12.50 %INT : ' + %char(%int(a)) + ' %INTH : ' + %char(%inth(a));
snd-msg '-12.50 %INT : ' + %char(%int(b)) + ' %INTH : ' + %char(%inth(b));
snd-msg '12.49 %INT : ' + %char(%int(c)) + ' %INTH : ' + %char(%inth(c));
snd-msg 'Reel 1234.5678 %INTH : ' + %char(%inth(poids));
snd-msg 'Duree 90 min, %INT : ' + %char(%int(duree / 60)) + ' heure';
snd-msg 'Duree 90 min, %INTH : ' + %char(%inth(duree / 60)) + ' heures';
*inlr = *on;
Résultat réel, compilé et exécuté sur IBM i 7.5 :
12.50 %INT : 12 %INTH : 13
-12.50 %INT : -12 %INTH : -13
12.49 %INT : 12 %INTH : 12
Reel 1234.5678 %INTH : 1235
Duree 90 min, %INT : 1 heure
Duree 90 min, %INTH : 2 heures
12,50 donne 13 avec %INTH et 12 avec %INT. Pour -12,50, l'arrondi s'éloigne de zéro : -13. Le réel 1234,5678 donne 1235.
Dernier cas : 90 minutes divisées par 60 font 1,5 heure. %INT répond 1 heure, %INTH répond 2 heures. Les deux sont « justes » : c'est à la règle de gestion de choisir.
Le piège
Le demi va toujours vers l'extérieur. 12,5 devient 13, mais -12,5 devient -13, pas -12. Ce n'est pas l'arrondi « au pair » de certains tableurs. Et comme pour %INT, un résultat trop grand pour la zone plante avec MCH1210.