Usei a seguinte linha para converter float em int, mas não é tão preciso quanto eu gostaria:
float a=8.61f;
int b;
b=(int)a;
O resultado é: 8
(deve ser 9
)
Quando a = -7.65f
, o resultado é: -7
(Deve ser -8
)
Qual é a melhor maneira de fazer isso?
java
floating-point
int
Frank
fonte
fonte
Respostas:
Usar
Math.round()
arredondará o flutuador para o número inteiro mais próximo.fonte
Math.round()
retornaint
valor para que a conversão de tipo usando(int)
seja redundante.(int)foo
é mais simples.Na verdade, existem diferentes maneiras de fazer o downcast de float para int, dependendo do resultado que você deseja alcançar: (para int
i
, floatf
)round (o número inteiro mais próximo do dado float)
nota: isto é, por contrato, igual a
(int) Math.floor(f + 0.5f)
truncar (ou seja, largar tudo após o ponto decimal)
teto / piso (um número inteiro sempre maior / menor que um determinado valor, se tiver alguma parte fracionária)
Para arredondar valores positivos , você também pode usar
(int)(f + 0.5)
, o que funciona exatamente comoMath.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.
fonte
Math.round(value)
arredonde o valor para o número inteiro mais próximo.Usar
fonte
Math.round também retorna um valor inteiro, assim você não precisa digitar.
fonte
Use
Math.round(value)
depois que o tipo converter para inteiro.fonte
Quanto a mim, mais fácil: (int) (a +.5) // a é um flutuador. Retornar valor arredondado.
Não depende dos tipos Java Math.round ()
fonte
-(int) ( PI / 3 )
: tente seu código com um negativoa
... desde quando-0.5
arredonda para0
?