[英]Something is wrong in this if else 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;
}
什么是 displaybmi的價值? 嘗試更改比較以使用19.0
以確保不會發生截斷。 您將float
(displaybmi)與int
(19)進行比較,這可能會導致意外行為。
還要仔細檢查你的計算:
float displaybmi = weight/(height*height);
如果您的體重是千克,高度是米,則可行。 如果您的體重是以磅為單位,高度以英寸為單位,則需要添加轉換因子:
float displaybmi = (weight * 703.0)/(height * height);
如果你想比較兩個浮點數,你可以使用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一致。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.