Na verdade, existem diferentes maneiras de fazer o downcast de float para int, dependendo do resultado que você deseja alcançar: (para int i
, float f
)
round (o número inteiro mais próximo do dado 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: isto é, por contrato, igual a (int) Math.floor(f + 0.5f)
truncar (ou seja, largar tudo após o ponto decimal)
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
teto / piso (um número inteiro sempre maior / menor que um determinado valor, se tiver alguma parte fracionária)
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
Para arredondar valores positivos , você também pode usar (int)(f + 0.5)
, o que funciona exatamente como Math.Round
nesses casos (conforme o documento).
Você também pode usar Math.rint(f)
o arredondamento para o número par mais próximo ; é indiscutivelmente útil se você espera lidar com muitos carros alegóricos com partes fracionárias estritamente iguais a 0,5 (observe os possíveis problemas de arredondamento do IEEE) e deseja manter a média do conjunto no lugar; você introduzirá outro viés, no qual números pares serão mais comuns do que ímpares.
Vejo
http://mindprod.com/jgloss/round.html
http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html
para mais informações e alguns exemplos.