android 无法从double转换为float

nom7f22z  于 2023-05-27  发布在  Android
关注(0)|答案(5)|浏览(193)

在我的数据库中,我有几个“真实的”字段。
结构如下:

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,它给了我一个错误“cannot convert from double to float”。我试过在weight前面使用(Float)将它转换为一个float,我试过使用weight.floatValue(),但似乎没有任何效果。

ego6inou

ego6inou1#

你试过这个吗?

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

tzcvj98z2#

这种方法怎么样?

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

2izufjch3#

从double到float的转换可以这样完成:

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

或者,如果您只需要将1.2表示为浮点数,则使用1.2f

备注

fslejnso

fslejnso4#

在我的例子中,你有一个Double变量,你可以像这样调用Double.floatValue()

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

aij0ehis5#

问题是double类型的精度比float高。当你做这个任务的时候你会丢失信息。这就是为什么编译器不允许你这么做。这类似于当你想做char b = a时发生的事情,其中a是int
使用显式强制转换可能允许您进行编译,但可能会发生数据/精度丢失。
编辑:
因为在你最初的问题中,所有的计算输入都是floats,所以使用浮点文字。例如,1.0278是一个double literal。也就是说,将f附加到常量中,这样所有的计算都是浮点数,不会被提升为double:

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

相关问题