繁体   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