In realtà, ci sono diversi modi per Downcast float a int, a seconda del risultato che si desidera raggiungere: (per int i
, float f
)
round (il numero intero più vicino alla data float)
i = Math.round(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3
nota: questo è, per contratto, pari a (int) Math.floor(f + 0.5f)
troncato (es. tutto goccia dopo il punto decimale)
i = (int) f;
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
ceil/piano (un numero intero sempre maggiore/minore di un dato valore se ha alcuna parte frazionaria)
i = (int) Math.ceil(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 3 ; f = 2.68 -> i = 3
f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
i = (int) Math.floor(f);
f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2
f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3
Per arrotondamento valori positivi, è anche possibile utilizzare semplicemente (int)(f + 0.5)
, che funziona esattamente come Math.Round
in questi casi (come da documento).
In teoria si potrebbe usare Math.rint(f)
per fare l'arrotondamento, ma rint
non arrotonda 0.5 in su, arrotonda verso l'alto o verso il basso, a seconda di quale di numero intero inferiore o superiore è pari, quindi è inutile nella maggior parte dei casi.
Vedi
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
per ulteriori informazioni e alcuni esempi.
Tengo a precisare che proprio typecasting tronca il valore e non esegue alcuna operazione di arrotondamento/pavimentazione sul valore. –