2013-01-25 71 views
6

在我的數據庫中,我有幾個「真實」字段。不能從雙重轉換爲浮動

繼承人的結構:

database.execSQL("create table " + TABLE_LOGS + " (" 
      + COLUMN_ID + " integer primary key autoincrement," 
      + COLUMN_ID_DAY_EXERCISE + " integer not null," 
      + COLUMN_REPS + " integer not null" 
      + COLUMN_WEIGHT + " real not null" 
      + COLUMN_1RM + " real not null" 
      + COLUMN_DATE + " integer not null" 
      + ")"); 

現在我所要做的是計算1RM,這樣我可以將其插入到數據庫中。

這是到目前爲止我的功能:

public void createLog(long id_day_exercise, float reps, long weight) { 

    // create 1rm 
    // create date timestamp 

    float onerm = weight/(1.0278-(.0278*reps)); 
    long unixTime = System.currentTimeMillis()/1000L; 
} 

我在這裏停留。它給我錯誤「不能從雙倍轉換爲浮點」爲onerm。我已經嘗試使用(浮動)在它前面投擲重量作爲浮動,我已經嘗試使用weight.floatValue(),似乎沒有任何工作。

回答

23

你試過嗎?

float onerm = (float) (weigth/(1.0278-(.0278*reps))); 
+1

這件事不適合我.. –

2

的問題是,double類型精度比float高。當你做這個任務時,你會失去信息。這就是編譯器不會讓你這樣做的原因。這與當您想要執行char b = a時發生的情況類似,其中a是int

使用顯式轉換可能允許編譯,但可能會發生數據/精度損失。

編輯:

因爲在你原來的問題全部投入到計算是floats,使用浮動文字。例如,1.0278是雙字面值。即追加f的常數,使得所有的計算是浮動,而不是提升到雙打:

float onerm = weight/(1.0278f-(.0278f*reps)); 
+0

你推薦我做什麼呢? – scarhand

+0

@scarhand關於使用浮點文字,請參閱編輯。 – frozenkoi

7

這個怎麼樣的做法?

Float.valueOf(String.valueOf(your_double_variable)); 
1

由於問題的更一般的答案標題(而不是具體內容),從雙鑄造成float可以這樣做:

double d = 1.2; 
float f = (float) d; 

或者,如果你只是需要將1.2作爲浮點數表示,然後使用1.2f