No se puede convertir de doble a float

En mi base de datos, tengo un par de campos "reales".

Heres la estructura:

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

Ahora lo que estoy tratando de hacer es calcular 1RM para que pueda insertarlo en la base de datos.

Aquí está mi función hasta ahora:

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

Estoy atascado aquí. Me está dando el error "no se puede convertir de doble a float" para onerm . He intentado lanzar el peso como un flotador usando (Float) delante de él, he intentado usar weight.floatValue () y nada parece trabajar.

4 Solutions collect form web for “No se puede convertir de doble a float”

¿Has probado esto?

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

¿Qué hay de este enfoque?

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

El problema es que el tipo double es mayor precisión que el float . Perderá información cuando haga esa asignación. Es por eso que el compilador no te permite hacer eso. Es similar a lo que sucede cuando se quiere hacer char b = a donde a es un int .

El uso de una conversión explícita podría permitirle compilar, pero podría ocurrir una pérdida de datos / precisión.

EDITAR:

Puesto que en su pregunta original todas las entradas al cálculo son floats , utilice literales flotantes. Por ejemplo, 1.0278 es un doble literal. Es decir, agregue f a las constantes tales que todos los cálculos son flotantes y no son promovidos a dobles:

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

Como una respuesta más general al título (pero no al contenido específico) de la pregunta, el casting de un doble a un flotante se puede hacer así:

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

O si sólo necesita expresar 1.2 como un flotador para empezar, a continuación, utilice 1.2f .

Nota

  • float es de una sola precisión de 32 bits y el double es de doble precisión de 64 bits por lo que es posible perder precisión en la conversión. Consulte la documentación de los tipos de datos primitivos .
FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.