2013-01-25 3 views
6

'a dönüştürülemiyor Veritabanımda birkaç tane "gerçek" alan var., floradan

İşte yapısı:

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" 
      + ")"); 

Şimdi ne yapmaya çalışıyorum ben veritabanına ekleyin böylece 1RM hesaplamak olduğunu. Ben burada kaldım

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; 
} 

:

İşte şimdiye kadar benim fonksiyonudur. onerm için "çiftten yüzmeye dönüştürülemiyor" hatası veriyor. Ben (float) kullanarak bir şamandıra olarak ağırlık döküm yapmaya çalıştım, weight.floatValue() kullanarak denedim ve hiçbir şey işe yaramıyor gibi görünüyor.

cevap

23

Bunu denediniz mi?

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

Bu şey benim için çalışmıyor .. –

2

konu double tip float daha yüksek hassasiyet olmasıdır. Bu ödevi yaptığınızda bilgi kaybedersiniz. Bu yüzden derleyici bunu yapmanıza izin vermez. Bir int olan bir char b = a yapmak istediğinizde olana benzer.

Açık bir yayın kullanmak derlemenizi sağlayabilir, ancak veri/hassasiyet kaybı olabilir.

DÜZENLEME: hesaplamaya tüm girişler floats, kullanım şamandıra değişmezdir

özgün sorunuzu beri. Örneğin, 1.0278 bir çift değişmezdir. Yani Bu yaklaşım hakkında

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

O zaman ne önerirsiniz? – scarhand

+0

@scarhand Şamandıra basımları kullanma hakkında düzenleme konusuna bakın. – frozenkoi

7

Ne: Tüm hesaplamalar yüzer ve çiftlerde terfi olmadığını böyle sabitleri için f eklemek?

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

Ģamandıraya çift yayın yapmak soruya daha genel bir başlığa cevap (ancak belirli içerik) böyle yapılabilir gibi:

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

Veya sadece eğer 1.2'u başlangıçta bir şamandıra olarak ifade etmeli, ardından 1.2f kullanın.

Not

  • float tek hassasiyetli 32-bit ve double dönüşümden kesinliği kaybetmek mümkündür çift hassasiyetli 64 bitlik böyledir. primitive data types documentation'a bakın.