Almacenar valores dobles en SQLite: ¿cómo asegurar la precisión?

Tengo un problema con los valores dobles que necesito para almacenar en una base de datos androide homed sqlite. Ya que estos valores dobles representan los valores de gps (lat & lng), realmente NEED una precisión absoluta hasta el 9 º número después de la coma.

Ahora tengo una tabla como esta:

 CREATE TABLE x REAL lng; 

Y inserta sth (hardcoded) como:

 INSERT INTO x lng = '1.0'; 

Y al leer lng de esta tabla en algunos (java) doble variable, obtengo un valor como "0.999956837" – esto hace que los valores bastante inútil para mí.

¿Hay alguna manera de hacer cumplir la precisión que necesito aparte de almacenar los valores como campos de "texto" (lo que haría costosas cargas necesarias) o almacenarlos como enteros (es decir, necesito multiplicar / dividir en cada escritura / lectura)?

SQLite es sin tipo, que significa que toda la representación se escribe como texto, probablemente el envoltorio api hace algunos conversos que no sabes, que obtienes esos resultados.

Si necesita almacenar los datos como cadena, hágalo.

Justo cuando lee el doble asegúrese de que guardó en el formato correcto, puede utilizar getDouble en la columna.

double tiene unos 17 dígitos decimales de precisión, por lo que si 9 dígitos es lo que necesita, no debería haber ningún problema (suponiendo que no hacer ningún cálculo complejo en esos valores). Sólo asegúrese de que nunca terminan usando float , ya que tiene sólo unos 7 dígitos de precisión.

También debe asegurarse de que entiende cómo funciona el punto flotante binario y que siempre resultará en valores aparentemente "redondos" que se desvían ligeramente, lo que simplemente no importa para la mayoría de las aplicaciones (incluido el suyo), siempre y cuando ocurra en algún lugar de la Decimosexto decimal. Vea ese enlace también para las alternativas para las aplicaciones donde importa.

  • Android SQLite - cambiando journal_mode
  • Mantenimiento de un ListView donde cada elemento de lista tiene una relación de uno a muchos
  • Necesito un ejemplo de sqlite con Monodroid
  • La tabla de actualización utilizando el método rawQuery () no funciona
  • Compartir base de datos SQLite entre 2 aplicaciones de Android?
  • Aplicación de Android y myBatis
  • SQLiteDatabase.insertOrThrow no se lanza pero no se insertan datos
  • ¿Qué se puede hacer sobre el hecho de que Android elimina automáticamente los archivos corruptos de SQLite?
  • No se pudo abrir la base de datos SQLite
  • WhereArgs Eliminación de la base de datos SQLite
  • Formatear un entero a una fecha formateada en una instrucción SQLite select
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.