impossible de convertir de double float
Dans ma base de données, j'ai un couple de "réel" des champs.
Heres la structure:
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"
+ ")");
Maintenant, ce que je suis en train de faire est de calculer 1RM pour que je puisse l'insérer dans la base de données.
Voici ma fonction jusqu'à présent:
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;
}
Je suis coincé ici. Il me donne le message d'erreur "impossible de convertir de le double, float" pour onerm
. J'ai essayé le casting du poids comme un flotteur en utilisant (Float) en face d'elle, j'ai essayé d'utiliser le poids.floatValue() et rien ne semble fonctionner.
Vous devez vous connecter pour publier un commentaire.
Avez-vous essayé ceci?
Quoi au sujet de cette approche?
Coulée à partir d'un double, d'un flotteur peut être fait comme ceci:
Ou si vous avez juste besoin d'exprimer
1.2
comme un float pour commencer, puis utilisez1.2f
.Note
float
est simple précision 32 bits etdouble
est double précision 64 bits il est possible de perdre de la précision de la conversion. Voir la les types de données primitifs de la documentation.Dans mon cas, vous avez un
Double
variable, vous pouvez appelerDouble.floatValue()
comme ceci:Le problème est que le
double
type est une précision plus élevée quefloat
. Vous allez perdre des informations lorsque vous effectuez cette mission. C'est pourquoi le compilateur ne pas vous laisser faire ça. C'est similaire à ce qui se passe lorsque vous voulez fairechar b = a
où a est unint
.À l'aide d'un cast explicite peut vous permettre de compiler, mais les données/perte de précision qui pourrait arriver.
EDIT:
Depuis dans votre question initiale, toutes les entrées pour le calcul sont
floats
, d'utiliser float littéraux. Par exemple,1.0278
est un double littérale. I. e. ajouterf
pour les constantes de telle sorte que tous les calculs sont des flotteurs et ne sont pas promus à doubles: