这个if else语句有什么问题吗?

时间:2012-05-04 20:51:43

标签: java android if-statement

当我打印消息的内容时,它总是给我“体重不足”,尽管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;
}

3 个答案:

答案 0 :(得分:3)

是什么 displaybmi的值?尝试更改比较以使用19.0以确保不会发生截断。您将float(displaybmi)与int(19)进行比较,这可能会导致意外行为。

答案 1 :(得分:1)

另外仔细检查你的计算:

float displaybmi = weight/(height*height);

如果您的体重是千克,高度是米,则可行。如果您的体重是以磅为单位,高度以英寸为单位,则需要添加转换因子:

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

Calculate-Your-Body-Mass-Index

答案 2 :(得分:0)

如果要比较两个浮点数,可以使用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说:

  

以数字方式比较两个Float对象。有两种方式   通过这种方法进行的比较与通过这种方法进行的比较不同   Java语言数值比较运算符(<<===>=>)   当应用于原始浮点值时:

     
      
  • Float.NaN被认为是   此方法等于自身并且大于所有其他浮点数   值(包括Float.POSITIVE_INFINITY)。
  •   此方法认为
  • 0.0f大于-0.0f。这确保了由此强加的Float对象的自然顺序   方法与equals一致。
  •