• このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

番号を丸める

  • Thread starter Thread starter x11start
  • Start date Start date

x11start

Guest
volendo arrotondare un numero all'intero non è un problema: basta sommarci il valore 0.5 e poi con fix scartare la parte dopo la virgola. in questo modo i valori che superano 0.5 passano al valore superiore (es. 6.6 + 0.5 = 7.1 -> 7) mentre i valori inferiori ... (es. 6.1 + 0.5 = 6.6 -> 6).

il problema sorge quando si vuole arrotondare .... allo 0.5.
io ho trovato questo algoritmo:
(/ (* (fix (/ (* (atof (rtos numero 2 1)) 10) (float passo))) (float passo)) 10)

questo consente di trasformare i numeri con la virgola fino a 0.49999 a 0.0; mentre quelli da 0.5 in poi diventano 1.0


questa è la sub completa:
;
;----------------------
; arrotondamento
;----------------------
;
; numero numero da arrotondare (es. 4.3546)
; passo valore di arrotondamento (es. 5 -> 0.5) (reale o intero: float trasf. sempre in reale)
;
; output:
;
; narro numero arrotondato (es da 4.0 a 4.4 -> 4.0 - da 4.5 a 5.0 -> 5.0 con passo=5)
;
(defun arrotonda (numero passo)
(setq narro (/ (* (fix (/ (* (atof (rtos numero 2 1)) 10) (float passo))) (float passo)) 10))
)


mi piacerebbe trovare un algoritmo in grado di "spaccare in 2 il capello" cioè
fare:
da 0.0 a 0.24 -> 0.0
da 0.25 a 0.74 -> 0.5
da 0.75 in su -> 1.0

c'è qualcuno in grado di aiutarmi?
 
arrotonda un numero n con base delta
(defun arrotonda (n delta)
(setq a (* delta (fix (+ 0.49 (/ n delta)))))
)

quello che serve a te fallo con l'istruzione cond

ciao
 
se può servire a qualcuno, ecco la routine di arrotondamento:

;
;----------------------
; arrotondamento
;----------------------
;
; input :
; numero numero da arrotondare (es. 4.35)
;
; output:
; narro numero arrotondato (es. 4.5)
;
;
; l'arrotondamento avviene secondo i seguenti criteri:
;
; da 0.00 a 0.24 -> 0.0
; da 0.25 a 0.74 -> 0.5
; da 0.75 a 1.0 -> 1.0
;
;
(defun arrotonda (numero / intero virgola)
(setq intero (fix numero)) ; numero intero
(setq virgola (- numero intero)) ; parte dopo la virgola
(cond
((< virgola 0.25)(setq arrot 0.0)) ; se < di 0.25 arrotonda a 0.0 (per difetto)
((and (>= virgola 0.25)(< virgola 0.75))(setq arrot 0.5)); arrot. a 0.5 (a metà)
(t (setq arrot 1.0)) ; altrimenti arrotonda a 1.0 (per eccesso)
)
(setq narro (+ intero arrot)) ; ricompone il numero (intero + parte arrotondata)
)
 

Forum statistics

Threads
46,674
Messages
380,976
Members
2
Latest member
loop80
このフォーラムは、www.cad3d.it/forum1 - イタリアのデザインコミュニティの機械翻訳です。いくつかの用語は正しく翻訳されていません。

Members online

No members online now.
Back
Top