Ответ 1
Вы выполняете разделение целое.
Вам нужно передать один операнд в double
.
Функция ниже получает два значения из sharedpreferences, weight и height, и я использую их для вычисления BMI, Когда я печатаю содержимое значений, я получаю значения, которые я ввел в sharedprefs (что хорошо), но затем, когда я запускаю операцию деления на них, я всегда получаю 0 в результате. Где ошибка?
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;
}
Вы выполняете разделение целое.
Вам нужно передать один операнд в double
.
Вы выполняете целочисленное деление, применяете значения до float
и изменяете тип данных переменной bmi
на float
.
Вот так:
float bmi = (float)weight/(float)(height*height);
Вы также должны изменить тип возврата вашего метода public int computeBMI()
на float
.
Я рекомендую вам прочитать этот вопрос о стеке.
Здесь у вас есть список Примитивные типы данных на Java с полным описанием.
Надеюсь, что это поможет!
Потому что bmi
- целое число. Объявите bmi
или Weight, Height
как числа с плавающей запятой. Когда вы используете целые числа в делении, вы получите целочисленное деление. Когда вы используете double/floats, вы получите разделение с плавающей запятой