Risultati da 1 a 4 di 4

Discussione: Arrotondare un numero

  1. #1
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    174
    Professione
    Disegnatore prefabbricati
    Regione
    Piemonte
    Software
    Autocad

    Predefinito Arrotondare un numero

    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?

  2. #2
    Utente Standard L'avatar di rpor66
    Iscritto dal
    2007
    Messaggi
    617
    Professione
    Programmatore
    Regione
    Sicilia
    Software
    AutoCad, CadWorx, Excel, Lisp, VBA

    Predefinito

    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

  3. #3
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    174
    Professione
    Disegnatore prefabbricati
    Regione
    Piemonte
    Software
    Autocad

    Predefinito

    Grazie per l'aiuto!

  4. #4
    Utente Standard
    Iscritto dal
    2008
    Messaggi
    174
    Professione
    Disegnatore prefabbricati
    Regione
    Piemonte
    Software
    Autocad

    Predefinito

    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)
    )


  • Discussioni Simili

    1. Arrotondare il risultato di una relazione
      Di mali_fx nel forum Creo Parametric - Modellazione di parti e Lamiera
      Risposte: 3
      Ultimo Messaggio: 27-05-2011, 10: 52
    2. Arrotondare il telaio di una porta
      Di tordek89 nel forum AutoCAD: Modellazione 3D e Rendering
      Risposte: 3
      Ultimo Messaggio: 10-02-2011, 16: 32
    3. numero bolla
      Di luragne nel forum Creo Parametric - Messa in tavola
      Risposte: 11
      Ultimo Messaggio: 28-05-2008, 10: 52

    Segnalibri

    Segnalibri

    Permessi di Scrittura

    • Tu non puoi inviare nuove discussioni
    • Tu non puoi inviare risposte
    • Tu non puoi inviare allegati
    • Tu non puoi modificare i tuoi messaggi
    •  



    CAD3D.it - la community dei progettisti