1

コード:

double indSRate[] = new double[c.getCount()];
indSRate[e++] = c.getDouble(c.getColumnIndex("s_rate"));


if (String.valueOf(indSRate[s]) == null) {
    Log.d("Special Rate", String.valueOf(indSRate[s++]));
}

s_rate 列のフィールドは、編集テキスト フィールドでユーザーによって空白のままにされました。どういうわけかそれをダブルに変えていますか?

ループ内で、フィールドが空の場合は特定のことを行い、そうでない場合は他のことを行います。しかし、それは0以上のようですか?「0」または別のものであることをテストできません。isEmpty かどうかをテストする必要がありますか?

4

4 に答える 4

3

double や int などのプリミティブ データ型は、null または「空」にすることはできません。これらを文字列に変換すると、デフォルト値はそれぞれ「0.0」と「0」になります。

添加

double の値が0.0次のとおりかどうかを確認できます。

if(indSRate[s] == 0.0) { // default value
    Log.d("Special Rate", String.valueOf(indSRate[s++]));
}

また:

int rateIndex = c.getColumnIndex("s_rate");
while(c.moveToNext()) {
    if(c.isNull(rateIndex))
        Log.d("Special Rate", "Null");
    indSRate[e++] = c.getDouble(rateIndex);
}

多くの解決策があります...

于 2012-05-25T20:33:59.500 に答える
2

列の値がNULLの場合、ResultSet.getDoubleは0.0を返します。プリミティブdoubleを使用するときに0.0とNULLを区別する場合は、ResultSet.wasNull()を明示的にチェックする必要があります。または、ResultSet.getObject()を取得して、Doubleにキャストすることもできます。その場合、明らかに'null'に対してチェックできるnull参照を取得します。

于 2012-05-25T21:09:43.553 に答える
2

値の内部表現が でNULL、クエリが を要求するFLOAT場合、戻り値として 0.0 を取得します (このドキュメントを参照してください)。

Cursor のその列に NULL 値が必要ない場合は、クエリで指定します。データベースに NULL 値が必要ない場合は、テーブルを作成するときに列の制約で指定します。

于 2012-05-25T20:45:48.293 に答える
1

Double は 0.0 で示しているため、空の場合は 0.0 を示します。これを試して:

String s = null;

double indSRate[] = new double[c.getCount()];

indSRate[e++] = c.getDouble(c.getColumnIndex("s_rate"));

if (String.valueOf(indSRate[s]) == null) {
    Log.d("Special Rate", s));
}
于 2012-05-25T20:45:56.353 に答える