Gambas-it

Gambas3 => Programmazione => Topic aperto da: vuott - 16 Agosto 2011, 18:33:44

Titolo: [RISOLTO] Arrotondamento all'unità superiore di un numero con la virgola
Inserito da: vuott - 16 Agosto 2011, 18:33:44
...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)
Titolo: Re: Arrotondamento all'unità superiore di un numero con la virgola
Inserito da: md9327 - 17 Agosto 2011, 09:43:27
ROUND
Titolo: Re: Arrotondamento all'unità superiore di un numero con la virgola
Inserito da: vuott - 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....
Titolo: Re: Arrotondamento all'unità superiore di un numero con la virgola
Inserito da: md9327 - 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...

Titolo: Re: Arrotondamento all'unità superiore di un numero con la virgola
Inserito da: vuott - 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
Titolo: Re: [RISOLTO] Arrotondamento all'unità superiore di un numero con la virgola
Inserito da: vuott - 28 Dicembre 2013, 19:12:22
...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