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