/

Pour déterminer le nombre de décimales de la résolution r, je la transforme en chaîne de caractères en notation décimale (l'option "noe" de la fonction string sert à empêcher la notation du nombre à virgule flottante sous forme de mantisse et exposant), et le résultat est donné par la longueur de la chaîne après le point :

var Int p := shunt ((string r "noe") parse any "." any:(var Str pd)) pd:len 0

Chaînes de caractères

Arrondir l'intervalle de classe h à la même résolution se ferait de la façon suivante :

h_arrondi := (cast h*10^p Int)/10^p

mais r n'étant pas nécessairement une puissance de 10, on calcule le quotient k de la division de h_arrondi par r (les deux termes étant d'abord transformés en valeurs entières pour que la division euclidienne ait un sens) :

var Int k := (cast h*10^p Int)\(cast r*10^p Int)

D'où la valeur finale pour l'intervalle de classe théorique :

ht := k*r