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