не удается преобразовать из double в float
в моей базе данных у меня есть несколько "реальных" полей.
вот структуру:
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;
}
Я застрял здесь. Это дает мне ошибку "не удается преобразовать из double в float" для onerm
. Я попытался бросить вес в качестве поплавка, используя (Float) перед ним, я попытался использовать вес.floatValue() и кажется, ничего не работает.
5 ответов
проблема в том, что double
тип является более высокая точность, чем float
. Вы потеряете информацию, когда будете выполнять это задание. Вот почему компилятор не позволяет вам этого делать. Это похоже на то, что происходит, когда вы хотите сделать char b = a
где a-это int
.
использование явного приведения может позволить вам скомпилировать, но потеря данных/точности может произойти.
EDIT:
так как в вашем исходном вопросе все входы в расчет являются floats
используйте float литералы. Например, 1.0278
двойной литерал. Т. е. добавить f
к константам таким, что все вычисления являются поплавками и не повышаются до двойников:
float onerm = weight/(1.0278f-(.0278f*reps));
в качестве более общего ответа на заголовок (но не на конкретное содержание) вопроса, кастинг из двойника в поплавок может быть выполнен следующим образом:
double d = 1.2;
float f = (float) d;
или если вам просто нужно, чтобы выразить 1.2
в качестве поплавка Для начала, затем используйте 1.2f
.
Примечание
-
float
одно-точность 32-бит иdouble
двойн-точность 64-разрядная поэтому возможно потерять точность в преобразовании. Вижу примитивные типы данных документация.
В моем случае у вас есть Double
переменная, вы можете вызвать Double.floatValue()
такой:
Double deg = 45.0d;
float floatDeg = deg.floatValue();