N° | Fonction | Catégorie | Version |
---|---|---|---|
BIA 07 | BiA_Round | Fonction Arithmétique | 1.0 - Janvier 2007 |
But | Retourne un nombre arrondi à la précision désirée. |
Prototype | (BiA_Round Nombre Précision) |
Arguments | Nombre - Le nombre à arrondir - Réel - Précision - Le nombre de décimales à conserver - Entier - |
Retours | Un nombre réel ou nil |
Var. globales | Néant |
Description | Permet d'arrondir un nombre en choisissant le degré de précision. - Si Précision est 0, le nombre est arrondi à l'entier le plus proche. - Sinon, Précision doit indiquer le rang de la décimale arrondie. |
Notes | Le nombre de chiffres après la virgule reste dépendant de la commande UNITES. |
Exemples | (BiA_Round 1.6666 0) retourne 2.00 (0 : entier le + proche) (BiA_Round 1.6666 1) retourne 1.7000 (arrondi à 1 décimale) (BiA_Round 1.6666 3) retourne 1.6670 (arrondi à 3 décimales) (BiA_Round 1.6666 3) retourne 1.667 (arrondi à 3 décimales) (dans ce cas, le nombre de décimales est fixé à 3, dans la commande UNITES, et à 4 pour l'exemple précédent.) (BiA_Round 1.3333 2) retourne 1.3300 (arrondi à 2 décimales) (BiA_Round "aa" "bb") retourne "aa (BiA_Round aa bb) retourne nil ( aa n'a pas été défini) |
1) (defun BiA_Round (*Nbr *Prec / Rem1) 2) (if (and 3) (= (type *Nbr) 'REAL) 4) (= (type *Prec) 'INT) 5) ) 6) (progn 7) (if (zerop *Prec) 8) (setq *Prec 1) 9) (setq *Prec (expt 10.0 (- *Prec))) 10) ) 11) (setq Rem1 (rem *Nbr *Prec)) 12) (if (>= Rem1 (/ *Prec 2.0)) 13) (- *Nbr Rem1 (- *Prec)) 14) (- *Nbr Rem1) 15) ) 16) ) 17) *Nbr 18) ) 19) )
Ligne 2 : Si Ligne 3 : le nombre à arrondir est du type réel Ligne 4 : et *Prec un nombre entier, Ligne 5: Alors Ligne 7 : si *Prec est égal à 0, Ligne 8 : donne la valeur de 1 à *Prec, Ligne 9 : sinon la valeur 10 puissance - *Prec Ligne 11 : Rem1 est égal au reste de la division de *Nbr par *Prec Ligne 12 : Si le reste Rem1 est plus grand ou égal à la moitié de *Prec Ligne 13 : retourne le nombre moins le reste et plus *Prec Ligne 14 : sinon le nombre *Nbr moins le reste Ligne 15 : retourne *Nbr tel quel sinon 1er if ligne 2 Ligne 17 : Retourne *Nbr si *Nbr n'est pas un réel et *Prec un entier.
Exemples : | *Prec | Rem1 Ligne 11 | Ligne 13 ou 14 | Résultats |
---|---|---|---|---|
(BiA_Round 1.6666 0) | 1 | rem 1.6666 et 1 = 0.6666 | 1.6666 - 0.6666 +1 | 2 |
(BiA_Round 1.6666 1) | 0.1 | rem 1.6666 et 0.1 = 0.0666 | 1.6666 - 0.0666 + 0.1 | 1.7 |
(BiA_Round 1.6666 3) | 0.001 | rem 1.6666 et 0.001 = 0.0006 | 1.6666 - 0.0006 + 0.001 | 1.667 |
(BiA_Round 1.3333 2) | 0.01 | rem 1.3333 et 0.01 = 0.0033 | 1.3333 - 0.0033 | 1.33 |