Inteiro para Float

ola estou com um problema bastante simples, mas nao sei como resolver.

Tenho um numero inteiro (int a = 1901538) e quero dividi=lo por 1024 e pegar daus casas de aproximacao.

Estou fazendoa assim:
int a = 1901538;
float b = a/1024;

syso(“b”);

Porem o resulatdo estah vindo sem aproximacao, apenas com um zero, eu quero com duas casas de aproximacao.
Valeu!

System.out.printf("%.2f\n", seuNumero);

Detalhe: Só funciona com Jdk 1.5 :slight_smile:

Falou!

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”.

vc usa o novo recurso do java 1.5

System.out.printf("%.2f", a);

:slight_smile: