This question already has an answer here:
- Double value returns 0 [duplicate] 3 answers
The function below gets two values from sharedpreferences, weight and height, and I use these to calculate the BMI, When I print the content of the values I get the values i have entered in the sharedprefs ( which is good) but then when i run a division operation on them, I always get 0 as a result.. Where is the 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;
}
Because
bmi
is an integer. Either declarebmi
orWeight, Height
as floating point numbers. When you use integers in a division, you will get integer division. When you use doubles/floats, you will get floating point divisionYou're doing integer division.
You need to cast one operand to
double
.You are doing an integer division, cast the values to
float
and change the datatype of the variablebmi
tofloat
.Like this:
You should also change the return type of your method
public int computeBMI()
tofloat
.I recommend you to read this stackoverflow question.
Here you have a list of the Primitive Data Types in Java with its full description.
Hope it helps!