2011-11-22 92 views
0

我試圖在表格中輸入「0.20」等值,但是當我在活動內顯示它時,它顯示「0.2」。我不確定爲什麼'0'被刪除,即不正確的表格結構,插入或返回。爲什麼插入數據時小數點會被刪除? SQLite(Android開發)

爲隨後創建我的表:

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID 
       + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME 
       + " TEXT NOT NULL, " + KEY_SWIMMERLAPS + " INT NOT NULL, " 
       + KEY_SPONSOR + " DEC(4,2) NOT NULL);"); 

我再插入數據:

public long addSwimmer(String name, String laps, String sponsor) { 
    int i = Integer.parseInt(laps); 
    ContentValues cv = new ContentValues(); 
    cv.put(KEY_NAME, name); 
    cv.put(KEY_SWIMMERLAPS, i); 
    cv.put(KEY_SPONSOR, (new DecimalFormat("0.00##")).format(0.20)); 
    return ourDatabase.insert(DATABASE_TABLE, null, cv); 
} 

,然後返回贊助數據:

public String getSwimmerSponsors() { 
    String[] columns = new String[] { KEY_SPONSOR }; 
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, 
      null, KEY_SWIMMERLAPS + " DESC"); 
    String result = ""; 

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) { 
     result = result + c.getString(0) + "\n"; 
    } 
    return result; 
} 

編輯 - 我顯示返回結果如下我的佈局:

String sponsors = swimmerDb.getSwimmerSponsors(); 
    tvSponsor.setText(sponsors); 

謝謝。

+1

becouse這就是sqlite如何工作的方式......使用'String.format(...)'+'Cursor.getDouble(...)' – Selvin

+0

您可以擴展它嗎?雖然,我相信你是對的 - 我對Java相對來說比較陌生,但我不確定你的意思。你能否提供一個更詳細的例子。謝謝。 – Sheldon

+1

'for(c.moveToFirst();!c.isAfterLast(); c.moveToNext()){ result = String.format(「%s%.2f \ n」,result,c.getDouble(0)) ; }現在很清楚了嗎?編輯:忘記f格式字符串! – Selvin

回答

1

因爲您顯示的是未格式化的Java變量,並且前導/尾隨0被抑制。

如果你想將其與特定的佈局格式,請使用printf/format變種之一:

printf("%.2f", num); // Etc. 
+1

[Downvote explanation?](http:// meta .stackexchange.com/questions/135 /鼓勵人們解釋反對票) –

+0

對不起,這是一個錯誤...我會在可以的時候投票。 – Sheldon

+1

@Sheldon不用擔心,只是困惑:)我只是想知道如果我完全錯過了某件事情,這發生的事情遠遠超過我的承認。 –

1

在談到數字0.20和0.2是完全一樣的。如果你想保持格式化,比我建議你插入值作爲格式化的字符串。

cv.put(KEY_SPONSOR,0.20); 

變成

cv.put(KEY_SPONSOR, (new DecimalFormat("0.00##")).format(0.20)); 

編輯:如果你走這條路,不要忘了從DEC改變KEY_SPONSOR列類型爲TEXT

+0

我改爲代碼,我似乎得到相同的結果。然而,正如@Dave所說 - 這可能是我在我的佈局中格式化它的方式。我編輯了我的問題以反映我所做的更改以及如何在佈局中顯示返回的值。 – Sheldon

+0

我不認爲這是這樣做的佈局,因爲您將值作爲字符串插入數據庫,因此返回應該是完全相同的字符串... – GETah

+0

您忘記將KEY_SPONSOR類型更改爲插入查詢中的字符串:「... KEY_SPONSOR +」DEC(4,2)NOT NULL「 – GETah

0

SQLite不提供或十進制任何類似的類型,你可以指定精度。唯一有小數位的數據類型是REAL,這就是你的號碼被處理的方式。

如果您需要指定精度,則可以乘以100(在本例中爲100)並以INTEGER存儲,或使用TEXT列。

相關問題