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