La división en Java siempre da como resultado cero (0)?

La siguiente función obtiene dos valores de las preferencias compartidas, peso y altura, y los utilizo para calcular el IMC. Cuando imprimo el contenido de los valores, obtengo los valores que he ingresado en laspreferencias compartidas (lo cual es bueno) pero luego, cuando ejecuto una operación de división en ellos, siempre obtengo 0 como resultado … ¿Dónde está el error?

public int computeBMI(){ SharedPreferences customSharedPreference = getSharedPreferences( "myCustomSharedPrefs", Activity.MODE_PRIVATE); String Height = customSharedPreference.getString("heightpref", ""); String Weight = customSharedPreference.getString("weightpref", ""); int weight = Integer.parseInt(Weight); int height = Integer.parseInt(Height); Toast.makeText(CalculationsActivity.this, Height+" "+ Weight , Toast.LENGTH_LONG).show(); int bmi = weight/(height*height); return bmi; } 

Estás haciendo una división entera .

Necesitas lanzar un operando al double .

Está haciendo una división entera, emite los valores para float y cambia el tipo de datos de la variable bmi para float .

Me gusta esto:

 float bmi = (float)weight/(float)(height*height); 

También debe cambiar el tipo de retorno de su método public int computeBMI() para float .

Te recomiendo que leas esta pregunta sobre el stackoverflow.

Aquí tiene una lista de los tipos de datos primitivos en Java con su descripción completa.

¡Espero eso ayude!

Porque bmi es un número entero. O declara bmi o Weight, Height como números de coma flotante. Cuando usas números enteros en una división, obtendrás una división entera. Cuando uses dobles / flotadores, obtendrás la división de punto flotante