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:
- ¿Se trata de una consulta SQLite válida?
- SQLiteException: cerca de "": error de sintaxis (código 1) al compilar
- Active Android es propenso a las inyecciones de SQL. ¿Alguna solución conocida?
- ¿Por qué fue InsertHelper obsoleta?
- Cómo eliminar miles de registros de sqlite android
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)?
- ¿Hay alguna posibilidad de sincronizar los datos de la tabla sqlite entre dos móviles android usando wi-fi
- Cómo acceder a la base de datos SQLite dentro de un archivo zip - android
- Base de datos SQlite programaticamente convertir en formato de archivo de Excel en Android
- SQLite de Android: Actualización
- Insertar null en la tabla Sqlite
- Consulta SQL para la relación de los hijos progenitores
- Cómo almacenar la imagen en la base de datos SQLite
- Seguridad de base de datos Sqlite
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.
- LocationClient no devuelve la llamada cuando se apaga la pantalla, pero mi WakefulThread se ejecuta sin problemas como se esperaba
- Android – colors.xml recurso a valor int