簡體   English   中英

這個if else語句有什么問題嗎?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM