2016-07-07 27 views
1

爲什麼float不會在另一個activity中返回想要的值。所有其他整數和字符串,但浮動不。Float不會在SharedPreferences中返回

發件人活性:

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身高和體重在控制檯仍然是正確的,b公式在控制檯中返回0.0。

+0

你已經把int值,你已經把雙 –

+0

在哪裏我已經把雙 – Onhar

+0

如果所有的價值觀詮釋Java使得通過int值的等分sharedpreferences:嘗試(浮動)體重/(身高×高)* 10000; – Jens

回答

1

因爲你在整數上進行數學計算並將結果存儲在浮點數中。數學仍然在整數上完成。所以你會將體重(50)除以身高*(大約10K)。 TH小於1,但分割兩個整數的結果總是一個整數。因此,四捨五入到0

爲了解決這個問題,使體重和身高浮動。

+0

工作感謝! – Onhar

+0

但是,如果我想在發送通知/執行操作之後循環播放它,它會在同一時間進行計數,並在估計的時間之後做同樣的事情。例。 「5分鐘 - - 5分鐘 - ...」 – Onhar

+0

而且一直持續重複,直到應用程序被刪除或時間改變 – Onhar

1

嘗試這樣

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

,並試圖獲得價值

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

因爲體重和身高是整數,所以大概的結果應該是零。 例如

int a = 10 
int b = 5 

float c = a/(b*b); 

因爲計算在INT結果0則返回0,然後它會強制轉換成浮點0.0 可以強制轉換的體重和身高浮像

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

那麼將返回0.400

0

這裏的問題是你將整數,結果將自動轉換爲浮動,因此,如果結果不是足夠大,你得到0(和無論哪種方式,你會得到一個int)。

你得先拿int類型劃分浮動來獲得期望的結果。

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