在我的数据库中,我有几个“真实”字段。
继承人的结构:
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()并且似乎没有任何效果。
答案 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
。
请注意
float
是单精度32位,double
是双精度64位,因此可能会失去转换的精度。请参阅primitive data types documentation。答案 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