LISP arrondi à 5cm près une longueur
JP
-
JP -
JP -
Bonjour,
j'ai crée un petit programme pour arrondir à 5 cm le résultat d'une distance
Mais j'ai un bug
car par exemple pour 433cm le résultat obtenue et 400cm au lieu de 435cm
;détermination de la porté
(setq PRT(distance p8 p9)); distance entre les 2 points par exemple 433
(setq PRT1 ( / PRT 5)) ; ici on divise la distance par 5
(setq PRT2 (FIX PRT1)); ici on va récupéré la parti entière du résultat de la division précédente donc 86
(setq PRT3 (* PRT2 5)) ; ici on va faire la multiplication de la parti entière par 5 86*5=430
( if ( = PRT3 PRT)
(progn
(setq PORTE PRT) ; si PRT3 = PRT alors le résultat PORTE = PRT
)
(progn
(setq PORTE (+ PRT3 5)); sinon si PRT <>PRT3 alors le résultat sera 430 + 5 =435
)
)
or moi le programme m'a donner 400 je penses que ça vienst de la commande FIX
j'ai crée un petit programme pour arrondir à 5 cm le résultat d'une distance
Mais j'ai un bug
car par exemple pour 433cm le résultat obtenue et 400cm au lieu de 435cm
;détermination de la porté
(setq PRT(distance p8 p9)); distance entre les 2 points par exemple 433
(setq PRT1 ( / PRT 5)) ; ici on divise la distance par 5
(setq PRT2 (FIX PRT1)); ici on va récupéré la parti entière du résultat de la division précédente donc 86
(setq PRT3 (* PRT2 5)) ; ici on va faire la multiplication de la parti entière par 5 86*5=430
( if ( = PRT3 PRT)
(progn
(setq PORTE PRT) ; si PRT3 = PRT alors le résultat PORTE = PRT
)
(progn
(setq PORTE (+ PRT3 5)); sinon si PRT <>PRT3 alors le résultat sera 430 + 5 =435
)
)
or moi le programme m'a donner 400 je penses que ça vienst de la commande FIX
A voir également:
- LISP arrondi à 5cm près une longueur
- Javascript arrondi ✓ - Forum Javascript
- 5cm taille reel - Guide
- Arrondi 0.5 supérieur ou inférieur - Forum Excel
- Arrondi publipostage - Forum Word
- Vba arrondi supérieur ✓ - Forum VB / VBA
1 réponse
Bonjour,
Cette fonction devrait résoudre ton problème
par exemple:
(setq dist 51.05); distance mesurée 51.05
(setq porte (arrondi5 dist)); distance arrondie à 55
(setq dist 55.0)); distance mesurée 55
(setq porte (arrondi5 dist)); distance arrondie à 55
A+
Cette fonction devrait résoudre ton problème
(defun arrondi5 (long) (setq long (fix long)) (if (= (rem long 5) 0) (setq result long) (setq result (+ (- long (rem long 5)) 5)) ) )
par exemple:
(setq dist 51.05); distance mesurée 51.05
(setq porte (arrondi5 dist)); distance arrondie à 55
(setq dist 55.0)); distance mesurée 55
(setq porte (arrondi5 dist)); distance arrondie à 55
A+
hier j'avais trouver mon erreur
mais ta solution et plus courte