Quando você divide um inteiro por outro inteiro, o resultado é um inteiro.
Para obter o valor desejado, pelo menos um dos operandos deve ser “float” ou “double”. Por exemplo:
int a = 1901538;
float b = (float) (a/1024.0);
System.out.println (b);
1024 é um inteiro, mas 1024.0 é um double.
Outra dica (que também vale para quem usa C/C++): em 99,9% do tempo é preferível usar double a float. Por incrível que pareça, costuma ser mais rápido e mais eficiente usar double em vez de float.
[quote=thingol]Quando você divide um inteiro por outro inteiro, o resultado é um inteiro.
Para obter o valor desejado, pelo menos um dos operandos deve ser “float” ou “double”. Por exemplo:
int a = 1901538;
float b = (float) (a/1024.0);
System.out.println (b);
1024 é um inteiro, mas 1024.0 é um double.
Outra dica (que também vale para quem usa C/C++): em 99,9% do tempo é preferível usar double a float. Por incrível que pareça, costuma ser mais rápido e mais eficiente usar double em vez de float.[/quote]
Nossa…uma novidade para mim! :shock:
Saberia me dizer por que é mais rápido???
O seu computador prefere trabalhar com ponto-flutuante de 64 bits (double) ou 80 bits (o “long double” do Borland C), internamente. Se trabalhar com 32, ele tem de ficar convertendo e desconvertendo de double para float internamente, o que leva um certo tempo.
É claro que existe o ponto-flutuante de 32 bits, e no caso do Pentium existe o conjunto de instruções SSE que faz operações de ponto flutuante muito rápidas com 32; é questão de verificar se na sua máquina a sua versão do Java consegue trabalhar com instruções SSE ou SSE2 internamente, e fazer um “benchmark”.