Подтвердить что ты не робот

Разделение на Java всегда приводит к нулю (0)?

Функция ниже получает два значения из 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;

}
4b9b3361

Ответ 1

Вы выполняете разделение целое.

Вам нужно передать один операнд в double.

Ответ 2

Вы выполняете целочисленное деление, применяете значения до float и изменяете тип данных переменной bmi на float.

Вот так:

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

Вы также должны изменить тип возврата вашего метода public int computeBMI() на float.

Я рекомендую вам прочитать этот вопрос о стеке.

Здесь у вас есть список Примитивные типы данных на Java с полным описанием.

Надеюсь, что это поможет!

Ответ 3

Потому что bmi - целое число. Объявите bmi или Weight, Height как числа с плавающей запятой. Когда вы используете целые числа в делении, вы получите целочисленное деление. Когда вы используете double/floats, вы получите разделение с плавающей запятой