Когда я сохраняю значение с плавающей точкой 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
Я проверил ширина Exec:
String sql = "INSERT INTO info_values (date, value) " +
"VALUES ('" + sdf.format(d) + "'," + Float.toString(newvalue) + ")";
database.execSQL(sql);
и что форма работает хорошо.
любая идея?
Я даже знаю, почему я использую float и почему Google использует всюду в API. Потому что это 32 бита в 32-битном процессоре и потому, что достаточно точности. – Tectona
@vkaci тогда просто не беспокойтесь о точности. Однако разница в скорости действительно не учитывается, я думаю (я никогда не обнаружил существенных различий). Вы также можете обратиться к этой теме: http://stackoverflow.com/q/1074474/1108032 –
Извините. Дело здесь в том, что число составляет 22,2 и хранится как 22.2000007629395. Это не проблема точности! Поплавок равен 22.2, после ContentValues.put число все равно кажется 22.2 (getAsString, getASFloat), но во время вставки что-то происходит. Я предполагаю, что это ошибка API. – Tectona