4
當我存儲浮點值WIDT SQLiteDatabase.insert所存儲的值將是比原來的不同,見下文:Android開發 - SQLite的存儲浮子
我有一個數據庫寬度:
db.execSQL("CREATE TABLE IF NOT EXISTS info_values ("
+ BaseColumns._ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
+ "date DATE UNIQUE NOT NULL, "
+ "value REAL NOT NULL)");
當我插入如33.3寬:
private class inputdlg_ok implements input_dlg.ReadyListener {
public void ready(float newvalue) {
Date d = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
ContentValues values = new ContentValues();
values.put("date", sdf.format(d));
values.put("value", newvalue);
database.insert("info_values", null, values);
我有這些:
sqlite> select * from info_values;
83|2012-04-04 09:06:22|33.2999992370605
84|2012-04-02 09:05:57|22.2000007629395
我已經測試寬度高管:
String sql = "INSERT INTO info_values (date, value) " +
"VALUES ('" + sdf.format(d) + "'," + Float.toString(newvalue) + ")";
database.execSQL(sql);
和形式的作品好。
有什麼想法嗎?
我甚至知道爲什麼我會使用float以及Google爲什麼在API中使用各處。因爲它是32位CPU中的32位,並且精度足夠。 – Tectona 2012-04-14 18:06:13
@vkaci然後就是不用擔心精度。然而,速度差異是真的可以忽略我認爲(我從來沒有發現任何顯着差異)。你也可以參考這個主題:http://stackoverflow.com/q/1074474/1108032 – 2012-04-14 18:10:42
對不起。這裏的情況是數字是22.2,並且存儲爲22.2000007629395。這不是精確問題!浮點數是22.2,在ContentValues.put之後數字仍然是22.2(getAsString,getASFloat),但是在插入過程中發生了一些事情。我認爲這是一個API錯誤。 – Tectona 2012-04-14 18:11:06