BiA_Round

Fonction Catégorie Version
BIA 07 BiA_Round Fonction Arithmétique 1.0 - Janvier 2007

Description

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)

La fonction


  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
Zerop : Vérifie qu'un nombre est égal à zéro.
Expt : Renvoie un nombre élevé à la précision spécifiée, ici 10 puissance -*Prec.
Rem : Renvoie le reste de la division de 2 nombres.