我在SQLite数据库中保存纬度和经度有问题。我可以保存一些位置,如(123.123999,123.123999),它将保存在数据库中。 但如果我想阅读它,我会得到像(123.124,123.124)那样的圆形位置。
我的表由这个sql段创建:
CREATE TABLE locs(id INTEGER PRIMARY KEY AUTOINCREMENT, lat DOUBLE, lng DOUBLE, num INTEGER)
查询结果:
SELECT * FROM locs WHERE lat = 123.124; //RETURN NO ROWS
SELECT * FROM locs WHERE lat = 123.123999; //RETURN 1 ROW
所以我不能用我得到的数字来查询数据。
我相信我不是第一个处理这个问题的人,因为这是基本的事情。但我没有找到任何适用于SQLite数据库的答案。
如何在db中读取和写入正确的数字?
答案 0 :(得分:2)
如何在db中读取和写入正确的数字?
我建议你快速解决一个问题。
由于您知道以何种格式存储坐标e.q.数字,所以将它们存储为TEXT
然后将它们检索为TEXT
没有问题,如果你想用它们做一些事情,那么简单地执行解析回DOUBLE
。
CREATE TABLE locs(
id INTEGER PRIMARY KEY AUTOINCREMENT,
lat TEXT,
lng TEXT,
num INTEGER
)
答案 1 :(得分:0)
您应该在查询的值周围定义一个epsilon,即
SELECT * FROM locs WHERE lat BETWEEN value-epsilon AND value+epsilon;
您可以根据需要更改您的epsilon。在示例中,您给出了1e-3就足够了。
另一种选择是在插入值时对值进行舍入,但随后您将丢失可能需要的信息。