Differenze tra le versioni di "Arrotondamento di un numero con virgola mobile"
Riga 1: | Riga 1: | ||
− | Se vogliamo ottenere un arrotondamento di un numero con la virgola, possiamo utilizzare la funzione | + | Se vogliamo ottenere un arrotondamento di un numero con la virgola, possiamo utilizzare la funzione "Round()" oppure la funzione "Ceil()". |
− | ==Uso della funzione | + | ==Uso della funzione "Round()"== |
La funzione '''[https://gambaswiki.org/wiki/lang/round?l=it Round()]''' arrotonda un numero al più vicino intero a seconda di alcuni casi. | La funzione '''[https://gambaswiki.org/wiki/lang/round?l=it Round()]''' arrotonda un numero al più vicino intero a seconda di alcuni casi. | ||
Riga 7: | Riga 7: | ||
Se il primo numero decimale è uguale o supriore a 5, si avrà un arrotondamento all'unità <SPAN Style="text-decoration:underline">''superiore''</span>: | Se il primo numero decimale è uguale o supriore a 5, si avrà un arrotondamento all'unità <SPAN Style="text-decoration:underline">''superiore''</span>: | ||
− | + | Public Sub Button1_Click() | |
Dim f As Float | Dim f As Float | ||
− | f = <FONT color= | + | f = <FONT color=red>Round</font>(87326.5) |
Print f | Print f | ||
− | + | End | |
In console avremo: | In console avremo: | ||
<BR>8732'''7''' | <BR>8732'''7''' | ||
===Arrotondamento all'unità ''inferiore''=== | ===Arrotondamento all'unità ''inferiore''=== | ||
− | Se il primo numero decimale è inferiore a 5, si avrà un arrotondamento all'unità < | + | Se il primo numero decimale è inferiore a 5, si avrà un arrotondamento all'unità <U>''inferiore''</u>: |
− | + | Public Sub Button1_Click() | |
Dim f As Float | Dim f As Float | ||
− | f = <FONT color= | + | f = <FONT color=red>Round</font>(87326.4999999) |
Print f | Print f | ||
− | + | End | |
In console avremo: | In console avremo: | ||
<BR>8732'''6''' | <BR>8732'''6''' | ||
Riga 37: | Riga 37: | ||
==Uso della funzione "Ceil()"== | ==Uso della funzione "Ceil()"== | ||
E', poi, possibile molto semplicemente utilizzare anche la funzione aritmetica '''[https://gambaswiki.org/wiki/lang/ceil?l=it Ceil()]''': se il numero è <SPAN style="text-decoration:underline">positivo</span> e contiene dei decimali, allora tale funzione restituirà un numero arrotondato all'unità intera superiore. | E', poi, possibile molto semplicemente utilizzare anche la funzione aritmetica '''[https://gambaswiki.org/wiki/lang/ceil?l=it Ceil()]''': se il numero è <SPAN style="text-decoration:underline">positivo</span> e contiene dei decimali, allora tale funzione restituirà un numero arrotondato all'unità intera superiore. | ||
− | + | Public Sub Main() | |
− | Print <FONT color= | + | Print <FONT color=red>Ceil</font>(1.49) |
− | + | End | |
in console si avrà il risultato: | in console si avrà il risultato: | ||
<BR>2 | <BR>2 | ||
Riga 50: | Riga 50: | ||
Mostriamo un esempio, nel quale il valore sarà arrotondato all'unità superiore, qualora il decimale a destra della virgola sia almeno pari a .5: | Mostriamo un esempio, nel quale il valore sarà arrotondato all'unità superiore, qualora il decimale a destra della virgola sia almeno pari a .5: | ||
− | + | Public Sub Main() | |
Dim f As Float = 4.543 | Dim f As Float = 4.543 | ||
Riga 59: | Riga 59: | ||
Print i | Print i | ||
− | + | End | |
Riga 78: | Riga 78: | ||
− | + | Public Sub Main() | |
Dim f As Float | Dim f As Float | ||
Riga 85: | Riga 85: | ||
Print f | Print f | ||
− | + | End | |
===Uso della funzione esterna "round()"=== | ===Uso della funzione esterna "round()"=== | ||
Riga 100: | Riga 100: | ||
− | + | Public Sub Main() | |
− | + | Dim f As Float | |
f = round_C(1.49) | f = round_C(1.49) | ||
Riga 110: | Riga 110: | ||
Print f | Print f | ||
− | + | End | |
Versione attuale delle 15:02, 1 lug 2024
Se vogliamo ottenere un arrotondamento di un numero con la virgola, possiamo utilizzare la funzione "Round()" oppure la funzione "Ceil()".
Indice
Uso della funzione "Round()"
La funzione Round() arrotonda un numero al più vicino intero a seconda di alcuni casi.
Arrotondamento all'unità superiore
Se il primo numero decimale è uguale o supriore a 5, si avrà un arrotondamento all'unità superiore:
Public Sub Button1_Click() Dim f As Float f = Round(87326.5) Print f End
In console avremo:
87327
Arrotondamento all'unità inferiore
Se il primo numero decimale è inferiore a 5, si avrà un arrotondamento all'unità inferiore:
Public Sub Button1_Click() Dim f As Float f = Round(87326.4999999) Print f End
In console avremo:
87326
Uso della funzione "Ceil()"
E', poi, 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.
Public Sub Main() Print Ceil(1.49) End
in console si avrà il risultato:
2
Arrotondamento senza funzioni specifiche di arrotondamento
E' possibile effettuare l'arrotondamento senza alcuna funzione appositamente dedicata all'arrotondamento, ma solo utilizzando la funzione "Fix()" per eliminare la parte decimale.
Mostriamo un esempio, nel quale il valore sarà arrotondato all'unità superiore, qualora il decimale a destra della virgola sia almeno pari a .5:
Public Sub Main() Dim f As Float = 4.543 Dim i As Integer i = Fix(f + 0.5) Print i End
Uso delle funzioni esterne della libreria libm.so.6
E' possibile, volendo, utilizzare alcune funzioni esterne appartenenti alla libreria libm.so.6.
Uso della funzione esterna "ceil()"
La funzione esterna "ceil()" restituisce il più piccolo valore integrale non inferiore a X. Il suo comportamento è identico a quello della funzione nativa di Gambas "Ceil()".
Poiché il suo nome è analogo al nome della funzione "Ceil()" nativa di Gambas, sarà necessario utilizzare per la funzione esterna un nome fittizio, e richiamare poi con Exec nella definizione in Extern il suo vero nome. [nota1]
Mostriamo un esempio pratico:
Library "libm:6" ' ceil (_Mdouble_ __x) ' Smallest integral value not less than X. Private Extern ceil_C(__x As Float) As Float Exec "ceil" Public Sub Main() Dim f As Float f = ceil_C(1.49) Print f End
Uso della funzione esterna "round()"
La funzione esterna "round()" arrotonda un numero in virgola mobile al valore integrale più vicino.
Poiché il suo nome è analogo al nome della funzione "Round()" nativa di Gambas, sarà necessario utilizzare per la funzione esterna un nome fittizio, e richiamare poi con Exec nella definizione in Extern il suo vero nome.
Mostriamo un esempio pratico:
Library "libm:6" ' round (_Mdouble_ __x) ' Round X to nearest integral value, rounding halfway cases away from zero. Private Extern round_C(__x As Float) As Float Exec "round" Public Sub Main() Dim f As Float f = round_C(1.49) Print f f = round_C(1.5) Print f End
Note
[1] Al riguardo vedere anche la seguente pagina:
https://www.gambas-it.org/wiki/index.php/Extern:_richiamare_funzioni_esterne_a_Gambas#Uso_del_nome_di_una_funzione_gi.C3.A0_utilizzato_da_Gambas