хранение двойных значений в SQLite: как обеспечить точность? - PullRequest
6 голосов
/ 21 июня 2010

У меня проблема с двойными значениями, которые мне нужно хранить в базе данных sqlite для Android.так как эти двойные значения представляют значения GPS (широта и долгота), я действительно NEED абсолютная точность до 9-го числа после запятой.

теперь у меня есть таблица, подобная этой:

CREATE TABLE x REAL lng;

и вставьте sth (жестко) как:

INSERT INTO x lng = '1.0';

и при чтении lng из этой таблицы в некоторую (java) двойную переменную я получаю значение, например "0.999956837" - это делает значения довольно бесполезнымидля меня.

есть ли способ обеспечить точность, которая мне нужна, кроме хранения значений в виде «текстовых» полей (что может потребовать дорогостоящих приведений) или хранения их в виде целых чисел (то есть мне нужно умножить / разделитьпри каждой записи / чтении)?

Ответы [ 2 ]

13 голосов
/ 21 июня 2010

SQLite - typeless , это означает, что все представление записывается в виде текста, вероятно, API-оболочка делает некоторые преобразования, о которых вы не знаете, что вы получите эти результаты.

Если вынеобходимо сохранить данные в виде строки . Сделайте это.

Только когда вы читаете двойную запись, убедитесь, что вы сохранили в правильном формате, вы можете использовать getDouble в столбце.

4 голосов
/ 21 июня 2010

double имеет около 17 десятичных знаков точности, поэтому, если вам нужно 9 цифр, проблем не должно быть (при условии, что вы не выполняете никаких сложных вычислений для этих значений).Просто убедитесь, что вы никогда не используете float, потому что он имеет точность порядка 7 цифр.

Вы также должны убедиться, что вы понимаете , как работает двоичная с плавающей точкой , и всегда приведет к тому, что, казалось бы, "круглые" значения станут немного некондиционными, что просто не имеет значения для большинства приложений (включая ваше), если оно удовлетворяет где-то в 17-й десятичной цифре.См. Эту ссылку также для альтернатив для приложений, где это имеет значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...