Autore Topic: [RISOLTO] Arrotondamento all'unità superiore di un numero con la virgola  (Letto 6259 volte)

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
...se per esempio ho il numero 1,49  e voglio arrotondarlo a 2.... c'è una funzione specifica? Come faccio ?

(fatemi anche l'esempio pratico usando il valore 1,49 - grazie)
« Ultima modifica: 18 Agosto 2011, 00:33:47 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Arrotondamento all'unità superiore di un numero con la virgola
« Risposta #1 il: 17 Agosto 2011, 09:43:27 »
ROUND

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Arrotondamento all'unità superiore di un numero con la virgola
« Risposta #2 il: 17 Agosto 2011, 16:06:08 »
ROUND

eh, Round... ho capito che se lasci il secondo valore a 0, Round ti arrotonda il numero all'unità intera più vicina: nel mio caso (1,49) lo arrotoderebbe ad 1.
Non ho ben capito il caso del 2° valore con un numero negativo o positivo....
« Ultima modifica: 15 Febbraio 2012, 16:28:04 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Arrotondamento all'unità superiore di un numero con la virgola
« Risposta #3 il: 17 Agosto 2011, 17:39:10 »
Bè, se leggi bene la doc, un numero positivo ti arrotonda al numero di cifre intere uguale al parametro, un numero negativo interessa invece il numero di decimali.

Esempi:
Codice: [Seleziona]
Round(1234.56, 2) = 1200
Round(1234.56, 0) = 1234
Round(1234.56, -1) = 1234.6
Round(1234.56789, -3) = 1234.568

La funzione Round è comunque un metodo per tagliuzzare un numero, ma ce ne sono altri, dipende da cosa vuoi ottenere. A volte serve un vero troncamento, in questo caso si usa Int(). Mi pare ci siano anche funzioni che estraggono le due porzioni (intera e decimale), in modo che possano essere trattate come si desidera...

« Ultima modifica: 17 Agosto 2011, 17:41:19 da md9327 »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Arrotondamento all'unità superiore di un numero con la virgola
« Risposta #4 il: 18 Agosto 2011, 00:30:54 »
Bè, se leggi bene la doc, un numero positivo ti arrotonda al numero di cifre intere uguale al parametro, un numero negativo interessa invece il numero di decimali.

La funzione Round è comunque un metodo per tagliuzzare un numero, ma ce ne sono altri, dipende da cosa vuoi ottenere. A volte serve un vero troncamento, in questo caso si usa Int(). Mi pare ci siano anche funzioni che estraggono le due porzioni (intera e decimale), in modo che possano essere trattate come si desidera...


Sì, ho notato che Round ha un comportamento complesso.
Per esempio,  se il secondo valore è positivo, arrotonda alla cifra superiore od inferiore, azzerando le cifre della parte intera cominciando dalla cifra indicante le unità (quindi la prima a destra di un numero) fino alla nma cifra pari al numero indicato nel 2° valore di Round. Se la nma cifra è compresa tra 0 e 4, il numero - che si intende arrotondare - sarà arrotondato per difetto (all'unità inferiore); se è compresa fra 5 e 9, il numero sarà arrotondato per eccesso (all'unità superiore). Ho notato che i decimali sono del tutto ignorati.
Quindi se abbiamo
Codice: [Seleziona]
Round(1234.99, 3)
il terzo numero partendo da destra (non si tiene conto dei decimali) è 2 (compreso fra 0 e 4); qui Round azzera tutte le cifre da quella più a destra sino alla terza verso sinistra (che è il 2), otterremo 1000.




Comunque sia, tornando alla questione dell'arrotondamento all'unità superiore, con Round l'arrotondamento all'unità superiore avviene solo se il decimale è uguale o superiore a 5.
Ne ho fatto un breve riassunto nella nostra WIKI, alla quale rimando:
http://www.gambas-it.org/wiki/index.php/Arrotondamento_di_un_numero_con_virgola_mobile
« Ultima modifica: 28 Dicembre 2013, 19:14:13 da vuott »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.722
  • Ne mors quidem nos iunget
    • Mostra profilo
...se per esempio ho il numero 1,49  e voglio arrotondarlo a 2.... c'è una funzione specifica? Come faccio ?

(fatemi anche l'esempio pratico usando il valore 1,49 - grazie)


Dunque.... è possibile molto semplicemente utilizzare anche la funzione aritmetica Ceil(): se il numero è positivo e contiene dei decimali, allora tale funzione restituirà un numero arrotondato all'unità intera superiore.
Codice: gambas [Seleziona]

Public Sub Main()

   Print Ceil(1.49)

End

in console si avrà il risultato: 2
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »