4

我在 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 数据库的答案。

如何在数据库中读取和写入正确的数字?

4

2 回答 2

2

如何在数据库中读取和写入正确的数字?

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

由于您知道以什么格式存储您的坐标 eq 数字,因此将它们存储为TEXT然后检索它们TEXT并简单地执行解析回DOUBLE如果您想对它们做一些事情是没有问题的。

CREATE TABLE locs(
   id INTEGER PRIMARY KEY AUTOINCREMENT,
   lat TEXT,
   lng TEXT,
   num INTEGER
)
于 2013-04-09T22:42:42.890 回答
0

您应该在查询值周围定义一个 epsilon,即

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

您可以根据需要更改您的 epsilon。在您给出的示例中, 1e-3 就足够了。

另一种选择是在插入值时对其进行四舍五入,但随后您可能会丢失可能需要的信息。

于 2013-04-09T19:54:57.260 回答