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并且您的查询请求 a FLOAT,您将获得 0.0 作为返回值(请参阅此文档)。

如果您不希望光标中该列的 NULL 值,请在查询中指定。如果您不希望数据库中有 NULL 值,请在创建表时使用列约束指定它。

于 2012-05-25T20:45:48.293 回答
2

如果列的值为 NULL,则 ResultSet.getDouble 返回 0.0。如果要在使用原始双精度时区分 0.0 和 NULL,则必须显式检查 ResultSet.wasNull()。或者,您可以获取 ResultSet.getObject() 并转换为 Double。在这种情况下,您将获得一个空引用,您显然可以对照“空”进行检查。

于 2012-05-25T21:09:43.553 回答
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 回答