[英]Why am I getting a “0.0” for an empty SQLite field in Java/Android?
編碼:
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之間進行測試嗎?
諸如double和int之類的原始數據類型不能為null或“空” ...將它們轉換為String時,默認值分別為“ 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);
}
有很多解決方案...
如果值的內部表示為NULL
並且查詢請求FLOAT
,則返回值為0.0(請參見本文檔 )。
如果您不希望游標中的該列為NULL值,請在查詢中指定。 如果您不想在數據庫中使用NULL值,請在創建表時使用列約束進行指定。
如果列的值為NULL,則ResultSet.getDouble返回0.0。 如果要在使用基本雙精度時區分0.0和NULL,則必須顯式檢查ResultSet.wasNull()。 或者,您可以獲取ResultSet.getObject()並轉換為Double。 在這種情況下,您將獲得一個null引用,顯然可以對照'null'進行檢查。
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));
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.