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) 与int(19) 进行比较,这可能会导致不良行为。

于 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

如果你想比较两个浮点数,你可以使用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 一致。
于 2012-05-04T21:09:17.603 回答