Cálculo estranho no meu teste

Amigos, mais uma vez uma dúvida besta…
No código de evento do meu botao “Calcular” eu criei esse calculo:

		float fAltura;
		float fPeso;
		float fImc;
		fAltura = Float.valueOf(jtextAltura.getText());
		fPeso   = Float.valueOf(jtextPeso.getText());
		fImc    = (fPeso / fAltura * fAltura);
		jtextIMC.setText(String.valueOf(fImc));

Entretanto o calculo fica errado se eu não colocar parentesis assim:


		float fAltura;
		float fPeso;
		float fImc;
		fAltura = Float.valueOf(jtextAltura.getText());
		fPeso   = Float.valueOf(jtextPeso.getText());
		fImc    = (fPeso / (fAltura * fAltura));
		jtextIMC.setText(String.valueOf(fImc));

Eu não entendi, pois na multiplicação a ordem dos fatores não altera o resultado…
Exite alguma conversão implicita para INT mesmo em expressões totalmente Float ?
Obrigado!

Quais valores vc está passando em altura e peso?

[]'s

tentou algo como

fImc = 1.0 * fPeso / Math.pow(fAltura, 2); // pode usar fAltura * fAltura, mas potência é mais legal u.u

?
se não houver algo dizendo que se tratam de números decimais (float/double) em uma divisão, ele faz o famoso DIV (divisão inteira). Multiplicando por 1 não alteraria o resultado, mas como está 1.0, o Java sabe que tudo dali pra frente é decimal

O problema é a precedência dos operadores, no primeiro caso seu codigo fez: (peso / altura) * altura,
mas você queria peso / (altura*altura), então você é obrigado a colocar o parenteses para fazer o que deseja.

Obrigado pela respostas é isso mesmo! A ordem de precedencia!!! Eu que pensei que a ordem dos fatores não alterava o produto! Dizem que toda divisão pode se transformar em uma multiplicação e vice-versa…
Veleu pessoal!

O que tu querias, sem os parêntesis era:

fImc    = fPeso / fAltura / fAltura;  

Ao dividir por (fAltura *fAltura) significa que queres dividir duas vezes pela altura.