1

メッセージの内容を印刷すると、displaybmi が 19 未満ではありませんが、常に「体重不足」と表示されます。

public String BMImessage(){
    SharedPreferences customSharedPreference = getSharedPreferences(
            "myCustomSharedPrefs", Activity.MODE_PRIVATE);

    String Height = customSharedPreference.getString("heightpref", "");
    String Weight = customSharedPreference.getString("weightpref", "");

    float weight = Float.valueOf(Weight);
    float height = Float.valueOf(Height);

    float displaybmi = weight/(height*height);
    if (displaybmi <19) 
        message = "Underweight" ;
    else if (displaybmi >=19 && displaybmi <=25) 
        message = "Desirable Weight";
    else if (displaybmi >=26 && displaybmi <=29) 
        message =  "Overweight" ;
    else if (displaybmi >=30 && displaybmi <=40) 
        message =  "Obese";
    else if (displaybmi >40) 
        message = "Extremely Obese" ;
    return message;
}
4

3 に答える 3

3

displaybmi の値は何ですか? 19.0切り捨てが発生しないように、使用する比較を変更してみてください。float(displaybmi) を(19)と比較しているintため、望ましくない動作が発生する可能性があります。

于 2012-05-04T20:54:21.930 に答える
1

また、計算を再確認してください。

float displaybmi = weight/(height*height);

これは、体重がキログラム単位で身長がメートル単位の場合に機能します。体重がポンド単位で身長がインチ単位の場合、変換係数を追加する必要があります。

float displaybmi = (weight * 703.0)/(height * height);

あなたの体格指数を計算する

于 2012-05-04T21:08:01.563 に答える
0

2 つの float を比較したい場合は、Float.compare(float f1, float f2)

if (Float.compare(displaybmi, 19) < 0) 
    message = "Underweight" ;
else if (Float.compare(displaybmi, 19) >= 0 && Float.compare(displaybmi, 25) <= 0)
...

Javadocは次のように述べています。

2 つの Float オブジェクトを数値的に比較します。このメソッドによって実行される比較が、プリミティブ float 値に適用されたときにJava 言語の数値比較演算子 ( <<===、 )によって実行される比較と異なる点が 2 つあります。>=>

  • Float.NaNこのメソッドでは、それ自体と等しく、他のすべての float 値 (Float.POSITIVE_INFINITY を含む) より大きいと見なされます。
  • 0.0fこの方法では、 は より大きいと見なされます-0.0f。これにより、このメソッドによって適用される Float オブジェクトの自然順序付けが equals と一致することが保証されます。
于 2012-05-04T21:09:17.603 に答える