17

以下の関数は、sharedpreferences から 2 つの値、体重と身長を取得し、これらを使用して 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;

}
4

3 に答える 3

51

整数除算を行っています。

1 つのオペランドを にキャストする必要がありますdouble

于 2012-05-04T20:27:30.307 に答える
21

整数除算を行っており、値を にキャストしfloat、変数のデータ型を に変更していbmiますfloat

このような:

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

public int computeBMI()また、メソッドの戻り値の型を に変更する必要がありますfloat

このスタックオーバーフローの質問を読むことをお勧めします。

ここには、Javaのプリミティブ データ型とその完全な説明のリストがあります。

それが役に立てば幸い!

于 2012-05-04T20:28:38.150 に答える
2

bmiは整数だからです。bmiまたはWeight, Height浮動小数点数として宣言します。除算で整数を使用すると、整数除算が得られます。double/float を使用すると、浮動小数点除算が得られます

于 2012-05-04T20:30:56.667 に答える