2013-04-09 4 views
4

J'ai un problème avec enregistrer la latitude et la longitude dans la base de données SQLite. Je peux sauver un endroit comme (123.123999, 123.123999) et il enregistrera dans la base de données. Mais si je veux le lire, je reçois un emplacement arrondi comme (123.124, 123.124).Android - Enregistrer l'emplacement dans la base de données SQLite

Ma table créée par ce segment sql:

CREATE TABLE locs(id INTEGER PRIMARY KEY AUTOINCREMENT, lat DOUBLE, lng DOUBLE, num INTEGER) 

et les résultats querys:

SELECT * FROM locs WHERE lat = 123.124; //RETURN NO ROWS 
SELECT * FROM locs WHERE lat = 123.123999; //RETURN 1 ROW 

donc je ne peux pas utiliser les chiffres que je reçois pour faire des requêtes sur les données.

Je crois que je ne suis pas le premier à gérer ce problème, parce que c'est chose de base. Mais je n'ai trouvé aucune réponse qui fonctionne sur la base de données SQLite.

Comment puis-je lire et écrire le bon numéro dans la base de données?

+0

ajoutez du code comment vous les récupérez. – Sajmon

Répondre

2

Comment puis-je lire et écrire le bon numéro dans la base de données?

Je vous suggère une solution rapide.

Puisque vous savez dans quel format vous stockez vos coordonnées e.q. numéros donc il n'y a pas de problème pour les stocker comme TEXT et puis les récupérer comme TEXT et effectuer une analyse simple retour à DOUBLE si vous voulez faire quelques trucs avec eux.

CREATE TABLE locs(
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    lat TEXT, 
    lng TEXT, 
    num INTEGER 
) 
+0

Une liitle peu moche solution, mais fonctionne ... – nrofis

0

Vous devez définir un epsilon autour de la valeur recherchée, à savoir

SELECT * FROM locs WHERE lat BETWEEN value-epsilon AND value+epsilon; 

Vous pouvez changer votre epsilon selon vos besoins. Dans l'exemple que vous avez donné 1e-3 devrait suffire.

Une autre option consiste à arrondir les valeurs lorsque vous les insérez, mais vous perdrez ensuite les informations dont vous pourriez avoir besoin plus tard.

+0

Mon vrai problème critique est que je reçois une valeur arrondie. Comment ils n'ont pas pensé à solution pour ce problème ... Et dans votre première façon, vous avez besoin epsilon 1e-3 parce que 123.1235 sera également arrondi à 123.124 – nrofis

+0

Vous avez raison, monsieur. Corrigé dans le post. Cependant, si le fait que vous obteniez une valeur arrondie vous préoccupe, vous devriez également publier le code que vous utilisez pour le récupérer. – scf

+0

Je ne sais pas comment ce tour affecte sur l'emplacement réel, pas de mètre quel est mon code, c'est faux. (Je montre juste les points sur la carte) – nrofis

Questions connexes