float不会在SharedPreferences中返回

时间:2016-07-07 06:40:50

标签: java android

为什么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。

4 个答案:

答案 0 :(得分:1)

因为你正在对整数进行数学运算并将结果存储在浮点数中。数学仍然在整数上完成。因此,您将按重量(50)除以高度*高度(约10K)。这小于1,但是除以两个整数的结果总是整数。所以它舍入到0。

要解决这个问题,请使体重和身高浮动。

答案 1 :(得分:1)

试试这个

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

并尝试获取值

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

答案 2 :(得分:0)

因为重量和高度是整数所以结果可能是零。 例如

int a = 10
int b = 5

float c = a/(b*b);

它将返回0,因为int中的计算结果为0,然后它将被转换为float 0.0 你可以强调重量和高度漂浮像

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

那么它将返回0.400

答案 3 :(得分:0)

这里的问题是你正在划分整数,然后结果自动转换为浮点数,所以如果结果不够好你得到0(无论哪种方式你得到一个int)。

你必须将该分区中的第一个int转换为float以获得所需的结果。

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