Проблемы SQLite с типом и порядком с плавающей точкой - PullRequest
3 голосов
/ 01 апреля 2011

Я работаю с приложением для iPhone, в котором настроена база данных SQLite. У меня есть поле в базе данных, которое имеет тип FLOAT, поэтому у меня есть значения, как 10 500,00. Дело в том, что если я выберу эту таблицу и упорядочу по этому полю, значения будут упорядочены так, как если бы это было строковое значение.

Вот пример того, что я получаю:

SELECT floatField FROM table ORDER BY floatField ASC;

И результат:

109,800.00
48,950.00
53,600.00
54,790.00
74,305.00

Это, очевидно, неправильно, потому что 109 800,00> 48 950,00 в качестве значений с плавающей запятой. Поэтому я думаю, что SQLite работает с этими значениями, как если бы они были строками, где 109 800,00 <48 950, где строка '1' <строка '4'. </p>

Если я приведу значение к плавающему, используя этот запрос:

SELECT cast(floatValue as Float) FROM table ORDER BY floatField ASC;

Результат, который я получаю, таков:

109
48
53
54
74

Так что это тоже неправильно.

Любые идеи будут приветствоваться!

1 Ответ

3 голосов
/ 01 апреля 2011

Я предлагаю не использовать запятую при вставке данных.SQLite немного преобразует данные, так что

insert into test values(1234.5);
insert into test values('1234.50');
insert into test values('1,234.5');

все разные.Если возможно, используйте первую версию, только если вы уверены, что значение анализируется правильно.

Сам я не могу воспроизвести проблему, но, возможно, потому что я не использую ту же версию SQLite.

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