2013-04-09 82 views
4

我在保存SQLite数据库中的经度和纬度时遇到问题。我可以保存一些位置,如(123.123999,123.123999),它将保存在数据库中。 但是,如果我想阅读它,我会得到像(123.124,123.124)这样的四舍五入的位置。这个SQL段创建Android - 在SQLite数据库中保存位置

我的表:

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

而且querys结果:

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

所以我不能用我可以做查询的数据的数量。

我相信我不是第一个处理这个问题的人,因为它是基本的东西。但是我没有找到任何适用于SQLite数据库的答案。

如何在db中读写正确的数字?

+0

添加代码如何检索它们。 – Sajmon 2013-04-09 21:49:54

回答

2

如何在db中读写正确的数字?

我建议你一个快速解决方案。

既然你知道你以什么格式存储你的坐标e.q.因此没有问题将它们存储为TEXT,然后将它们检索为TEXT,如果您想要与它们做某些事情,可以简单地执行解析回DOUBLE

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

一个有点丑陋的解决方案,但工程... – nrofis 2013-04-10 19:47:10

0

你应该定义围绕查询值的ε,即

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

你可以根据你的需要改变你的小量。在你给1e-3的例子中应该足够了。

另一种方法是在插入值时对值进行舍入,但这样会丢失您可能需要的信息。

+0

我真正的关键问题是我得到了四舍五入的价值。他们怎么没有想到这个问题的解决方案... 而在你的第一种方式,你需要epsilon 1e-3,因为123.1235也将四舍五入到123.124 – nrofis 2013-04-09 20:02:35

+0

你是对的,先生。在帖子中更正。然而,如果你得到一个四舍五入的值是你关心的事情 - 你还应该发布你用来检索它的代码。 – scf 2013-04-09 20:09:01

+0

我只是不知道这一轮如何影响真正的位置,没有米是什么,我的代码,它的错误。 (我只是在地图上显示的点) – nrofis 2013-04-09 20:18:52

相关问题