簡體   English   中英

浮動不返回SharedPreferences

[英]float doesn't return in SharedPreferences

為什么float在另一個活動中不返回想要的值。 所有其他int和Strings都有,而float卻沒有。

發件人活動:

 SharedPreferences prefs = this.getSharedPreferences(
                        "details", Context.MODE_PRIVATE);
                SharedPreferences.Editor edit = prefs.edit();
                edit.putInt("weight", weight);
                edit.putInt("height", height);
                edit.putInt("age", ag);
                edit.commit();

Log.d("BMI Height" , String.valueOf(height));
Log.d("BMI Weight" , String.valueOf(weight));

BMI控制台中的身高和體重正確

接收者活動:

 SharedPreferences prefs = getSharedPreferences(
            "details", Context.MODE_PRIVATE);

    int age=prefs.getInt("age", Integer.parseInt("16"));
    int weight=prefs.getInt("weight", Integer.parseInt("50"));
    int height=prefs.getInt("height", Integer.parseInt("165"));

Log.d("BMI Height" , String.valueOf(height));
Log.d("BMI Weight" , String.valueOf(weight));

    float formula = weight / (height * height) * 10000;

    Log.d("BMI Formula", String.valueOf(formula));

BMI控制台中的身高和體重仍然正確,但是公式在控制台中返回0.0。

因為您正在對整數進行數學運算並將結果存儲在浮點數中。 數學仍然以整數完成。 因此,您將體重(50)除以身高*身高(約10K)。 THat小於1,但將兩個整數相除的結果始終是整數。 因此它舍入為0。

要解決此問題,請使體重和身高浮動。

這樣嘗試

edit.putFloat("key", (float) 10.10);

並嘗試獲得價值

prefs.getFloat("key", (float) 10.0);

由於體重和身高是整數,因此結果應該為零。 例如

int a = 10
int b = 5

float c = a/(b*b);

它將返回0,因為int中的計算結果為0,然后它將類型轉換為float 0.0,您可以將重量和高度類型轉換為float

float c = (float)a/((float)b*(float)b);

那么它將返回您0.400

這里的問題是您正在分割整數,然后將結果自動強制轉換為浮點數,因此,如果結果不夠好,您將獲得0(或者以任何一種方式獲得一個整數)。

您必須將除法運算中的第一個int進行浮點運算才能獲得所需的結果。

float formula = (float) weight / (height * height) * 10000;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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