簡體   English   中英

在SQLite中存儲double值:如何確保精度?

[英]storing double values in SQLite: how to ensure precision?

我有一個問題,我需要存儲在android homed sqlite數據庫中的雙值。 因為這些double值代表gps值(lat&lng),所以我真的NEED一個絕對精度,直到逗號后的第9個數字。

現在我有一個這樣的表:

CREATE TABLE x REAL lng;

並插入sth(硬編碼),如:

INSERT INTO x lng = '1.0';

當從這個表讀取lng到一些(java)雙變量時,我得到一個像“0.999956837”這樣的值 - 這使得這些值對我來說毫無用處。

有沒有辦法強制執行我需要的精度,除了將值存儲為“文本”字段(什么會使昂貴的演員需要)或將它們存儲為整數(意味着我需要在每次寫/讀操作時乘以/除)?

SQLite是無類型的 ,這意味着所有表示都是作為文本編寫的,可能包裝器api做了一些你不知道的轉換,你得到了那些結果。

如果需要將數據存儲為字符串, 請執行此操作。

就在您讀出double時,請確保以正確的格式保存,您可以在列上使用getDouble

double有大約17個十進制數字的精度,所以如果你需要9位數,那么應該沒有問題(假設你沒有對這些值進行任何復雜的計算)。 只要確保你永遠不會使用float ,因為它只有大約7位數的精度。

您還應該確保理解二進制浮點的工作方式 ,並且它總是會導致看似“圓”的值略微偏離 - 這對於大多數應用程序(包括您的)來說無關緊要,只要它發生在某個地方。第17個十進制數字。 請參閱該鏈接,了解其重要性的應用程序的替代方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM