nu poate converti din dublu în float (Programare, Android, Număr Întreg, Divizia)

scarhand a intrebat.

În baza mea de date, am câteva câmpuri „reale”.

Iată structura:

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

Acum, ceea ce încerc să fac este să calculez 1RM, astfel încât să îl pot introduce în baza de date.

Iată funcția mea de până acum:

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

M-am blocat aici. Îmi dă eroarea „cannot convert from double to float” pentru onerm. Am încercat să transform greutatea în float folosind (Float) în fața ei, am încercat să folosesc weight.floatValue() și nimic nu pare să funcționeze.

5 răspunsuri
WLin

Ați încercat acest lucru?

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

Ahmad Raza

Ce zici de această abordare?

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

Suragch

Casting-ul de la un double la un float se poate face astfel:

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

Sau dacă trebuie doar să exprimați 1.2 ca un float pentru început, atunci folosiți 1.2f.

Notă

Comentarii

  • dacă pierderea de precizie nu este un factor important, acesta este de departe cel mai curat răspuns aici –  > Por pat8719.
arenaq

În cazul meu aveți un Double variabilă, puteți apela Double.floatValue() în felul următor:

Double deg = 45.0d;
float floatDeg = deg.floatValue();

frozenkoi

Problema este că double este de precizie mai mare decât float. Veți pierde informații atunci când faceți această atribuire. De aceea compilatorul nu te lasă să faci asta. Este similar cu ceea ce se întâmplă atunci când doriți să faceți char b = a unde a este un tip int.

Folosind un cast explicit s-ar putea să vă permiteți să compilați, dar s-ar putea întâmpla pierderi de date/precizie.

EDIT:

Deoarece în întrebarea dvs. inițială toate intrările în calcul sunt floats, , utilizați literali float. De exemplu, 1.0278 este un literal dublu. Adică adăugați f la constante, astfel încât toate calculele să fie float și să nu fie promovate la dublu:

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

Comentarii

  • ce îmi recomandați să fac atunci? –  > Por scarhand.