无法从double转换为float

时间:2013-01-25 00:52:43

标签: android integer division

在我的数据库中,我有几个“真实”字段。

继承人的结构:

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

我被困在这里。它给了我onerm的错误“无法从double转换为float”。我已经尝试通过在它前面使用(Float)将重量作为浮点数投射,我尝试使用weight.floatValue()并且似乎没有任何效果。

5 个答案:

答案 0 :(得分:27)

你试过这个吗?

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

答案 1 :(得分:13)

这种做法怎么样?

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

答案 2 :(得分:3)

作为问题标题(但不是特定内容)的更一般的答案,可以这样做:从double转换为float:

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

或者,如果您只需要将1.2表示为浮动,请使用1.2f

请注意

答案 3 :(得分:2)

问题是double类型的精度高于float。进行该任务时,您将丢失信息。这就是编译器不允许你这样做的原因。这与您想要char b = a的情况类似,其中a为int

使用显式强制转换可能允许您进行编译,但可能会发生数据/精度损失。

编辑:

由于在原始问题中,计算的所有输入都是floats,因此请使用float literals。例如,1.0278是双字面值。即将f附加到常量,以便所有计算都是浮点数并且不会提升为双精度数:

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

答案 4 :(得分:1)

在我的情况下,您有一个npm install变量,您可以像这样调用css-modules

Double