在我的数据库中,我有几个“真实的”字段。
结构如下:
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(),但似乎没有任何效果。
5条答案
按热度按时间ego6inou1#
你试过这个吗?
tzcvj98z2#
这种方法怎么样?
2izufjch3#
从double到float的转换可以这样完成:
或者,如果您只需要将
1.2
表示为浮点数,则使用1.2f
。备注
float
是单精度32位,double
是双精度64位,因此在转换时可能会丢失精度。参见primitive data types documentation。fslejnso4#
在我的例子中,你有一个
Double
变量,你可以像这样调用Double.floatValue()
:aij0ehis5#
问题是
double
类型的精度比float
高。当你做这个任务的时候你会丢失信息。这就是为什么编译器不允许你这么做。这类似于当你想做char b = a
时发生的事情,其中a是int
。使用显式强制转换可能允许您进行编译,但可能会发生数据/精度丢失。
编辑:
因为在你最初的问题中,所有的计算输入都是
floats
,所以使用浮点文字。例如,1.0278
是一个double literal。也就是说,将f
附加到常量中,这样所有的计算都是浮点数,不会被提升为double: