当我打印消息的内容时,它总是给我“体重不足”,尽管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;
}
答案 0 :(得分:3)
是什么 displaybmi的值?尝试更改比较以使用19.0
以确保不会发生截断。您将float
(displaybmi)与int
(19)进行比较,这可能会导致意外行为。
答案 1 :(得分:1)
另外仔细检查你的计算:
float displaybmi = weight/(height*height);
如果您的体重是千克,高度是米,则可行。如果您的体重是以磅为单位,高度以英寸为单位,则需要添加转换因子:
float displaybmi = (weight * 703.0)/(height * height);
答案 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一致。