14

私のデータベースには、いくつかの「実際の」フィールドがあります。

構造は次のとおりです。

    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) を使用して重量をフロートとしてキャストしようとしましたが、 weight.floatValue() を使用してみましたが、何も機能していないようです。

4

5 に答える 5

31

これを試しましたか?

float onerm = (float) (weigth/(1.0278-(.0278*reps)));
于 2013-01-25T00:57:00.170 に答える
15

このアプローチはどうですか?

Float.valueOf(String.valueOf(your_double_variable));
于 2014-11-02T00:19:35.673 に答える
2

問題は、double型が よりも精度が高いことですfloat。その割り当てを行うと、情報が失われます。そのため、コンパイラはそれを許可しません。char b = aこれは、 a が an の場合に実行したい場合と似ていますint

明示的なキャストを使用すると、コンパイルできる可能性がありますが、データ/精度の損失が発生する可能性があります。

編集:

元の質問では、計算へのすべての入力がであるfloatsため、float リテラルを使用します。たとえば1.0278、二重リテラルです。fつまり、すべての計算が float で double に昇格されないように、定数に追加します。

float onerm = weight/(1.0278f-(.0278f*reps));
于 2013-01-25T01:03:52.013 に答える