0

私は理解できない別の奇妙な問題を抱えています。

max を使用して double をデータベースに保存しています。小数点以下3桁。double はデータベースに正しく格納されていますが、データを取得して格納された double を加算/乗算しようとすると、奇妙な問題が発生します

小数点以下 1 桁のみでデータを格納している場合、すべて正常に動作し、正しい結果が得られます。しかし、小数点の後に 2 桁以上追加すると、計算全体が機能しなくなります。TextViews に結果が表示されません。

私は何時間もの間何が起こっているのかを理解しようとしていますが、なぜこれが起こるのかわかりません.

コードは次のとおりです。

TextViews がテキストを取得する私の MainActivity:

public void calc() {
        // Get text for the statistics
        amount_widget.setText(db.getSearchResult("amount", 0));     
        lpayment_widget.setText(db.getSearchResult("price", 0));
        tpayment_widget.setText(db.getSearchResult("total_price", 1));
        mileage_widget.setText(db.getSearchResult("mileage", 2));
        trefueled_widget.setText(db.getSearchResult("amount", 1));

        // Calculate text for the consumption
        double consumption = (Double.parseDouble(db
                .getSearchResult("amount", 1)) / Double.parseDouble(db
                .getSearchResult("mileage", 2))) * 100;
        consumption = Math.round(consumption * 100) / 100.0;
        consumption_widget.setText(consumption + "L /100km");
    }

コードが取得および計算されているマイ データベース アクティビティ:

public String getSearchResult(String sql, int cmd) {

if (cmd == 0) {
    String countQuery = "SELECT " + sql + " FROM " + TABLE_NAME
            + " WHERE _id = (SELECT max(_id) FROM " + TABLE_NAME + ")";
    Cursor cursor = db.rawQuery(countQuery, null);

    String tmp = cursor.moveToFirst() ? cursor.getString(0) : "0";

    cursor.close();

    return tmp;
} else if (cmd == 1) {
    double sum = 0;
    String countQuery = "SELECT " + sql + " FROM " + TABLE_NAME;
    String idQuery = "SELECT _id FROM " + TABLE_NAME
            + " WHERE _id = (SELECT max(_id) FROM " + TABLE_NAME + ")";
    Cursor cursor = db.rawQuery(countQuery, null);
    Cursor id = db.rawQuery(idQuery, null);
    // berechnung
    cursor.moveToFirst();
    id.moveToFirst();

    int maxId = Integer.parseInt(id.getString(0));
    for (int i = 0; i < maxId; i++) {

        double tmp = Integer.parseInt(cursor.getString(0));
        sum = sum + tmp;
        cursor.moveToNext();
    }
    cursor.close();
    id.close();
    return String.valueOf(sum);
} else if (cmd == 2 && sql == "mileage") {
    double sum = 0;
    String countQuery = "SELECT " + sql + " FROM " + TABLE_NAME;
    String idQuery = "SELECT _id FROM " + TABLE_NAME
            + " WHERE _id = (SELECT max(_id) FROM " + TABLE_NAME + ")";
    Cursor cursor = db.rawQuery(countQuery, null);
    Cursor id = db.rawQuery(idQuery, null);
    // berechnung
    cursor.moveToFirst();
    id.moveToFirst();

    int maxId = Integer.parseInt(id.getString(0));
    if (maxId > 1) {
        int array[] = new int[maxId];

        // Array füllen
        for (int i = 0; i < maxId; i++) {

            array[i] = Integer.parseInt(cursor.getString(0));
            // sum = sum + tmp;
            cursor.moveToNext();
        }
        for (int k = 1; k < maxId; k++) {
            double tmp;
            tmp = array[k] - array[k - 1];
            sum = sum + tmp;
        }

        cursor.close();
        id.close();
        return String.valueOf(sum);
    } else {
        return "--";
    }

}
return "Wrong CMD";
}
4

2 に答える 2

0

単純な間違いを犯しているかもしれません。代わりに:
consumption_widget.setText(consumption + "L /100km");
これを試してください:

consumption_widget.setText(String.valueOf(consumption) + "L /100km");
于 2013-04-08T08:35:28.453 に答える
0

私は自分の間違いを見つけました。

メソッド内の DbAdapter クラスにgetSearchResult()は、次のステートメントがあります。

for (int i = 0; i < maxId; i++) {

        double tmp = Integer.parseInt(cursor.getString(0));
        sum = sum + tmp;
        cursor.moveToNext();
    }

ここでは、Integer を解析しようとしていますが、double に書き込みます。これが、計算を実行できなかった理由です。次のように double を解析する必要があります。

for (int i = 0; i < maxId; i++) {

        double tmp = Double.parseDouble(cursor.getString(0));
        sum = sum + tmp;
        cursor.moveToNext();
    }

これが私の問題の解決策です

于 2013-04-09T12:57:54.820 に答える