не удается преобразовать из 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 ответов


вы пробовали это?

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

Как насчет такого подхода?

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

проблема в том, что 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.

Примечание


В моем случае у вас есть Double переменная, вы можете вызвать Double.floatValue() такой:

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