2013-04-09 42 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

相關問題