powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Некорректный результат суммирования значений полей с типом REAL
3 сообщений из 3, страница 1 из 1
Некорректный результат суммирования значений полей с типом REAL
    #39427110
idefix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго.
Помогите, пожалуйста, понять как добиться правильного результата при суммировании значений полей с типом REAL.
База
--
-- Использованная кодировка текста: UTF-8
--
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;

-- Таблица: temp_table
CREATE TABLE temp_table (oper1 REAL, oper2 REAL);
INSERT INTO temp_table (oper1, oper2) VALUES (10849.42, '');
INSERT INTO temp_table (oper1, oper2) VALUES (3583.1, '');
INSERT INTO temp_table (oper1, oper2) VALUES (1692.82, '');
INSERT INTO temp_table (oper1, oper2) VALUES (426457.08, 66914);
INSERT INTO temp_table (oper1, oper2) VALUES (2162127.76, 222814.95);
INSERT INTO temp_table (oper1, oper2) VALUES (119019.55, 17061.57);
INSERT INTO temp_table (oper1, oper2) VALUES (65173.57, 3162.88);
INSERT INTO temp_table (oper1, oper2) VALUES (105869.34, 27002.5);
INSERT INTO temp_table (oper1, oper2) VALUES ('', '');
INSERT INTO temp_table (oper1, oper2) VALUES (52719.41, 2437.83);
INSERT INTO temp_table (oper1, oper2) VALUES ('', '');
INSERT INTO temp_table (oper1, oper2) VALUES (36314.74, '');
INSERT INTO temp_table (oper1, oper2) VALUES (33600.35, '');
INSERT INTO temp_table (oper1, oper2) VALUES (255278.81, 101977.5);
INSERT INTO temp_table (oper1, oper2) VALUES (904432.22, 176055.26);
INSERT INTO temp_table (oper1, oper2) VALUES (162280.1, '');
INSERT INTO temp_table (oper1, oper2) VALUES (3300280.52, '');
INSERT INTO temp_table (oper1, oper2) VALUES (4109467.11, '');
INSERT INTO temp_table (oper1, oper2) VALUES (4652.7, '');
INSERT INTO temp_table (oper1, oper2) VALUES (1511640.1, 378057);
INSERT INTO temp_table (oper1, oper2) VALUES (397621.43, 115545.63);
INSERT INTO temp_table (oper1, oper2) VALUES (2732456.43, 456588.83);
INSERT INTO temp_table (oper1, oper2) VALUES (718777.19, '');
INSERT INTO temp_table (oper1, oper2) VALUES (3932427.05, 526686.59);
INSERT INTO temp_table (oper1, oper2) VALUES (3745034.4, 1845.6);
INSERT INTO temp_table (oper1, oper2) VALUES (659265, 58769);
INSERT INTO temp_table (oper1, oper2) VALUES (216995, 60027);
INSERT INTO temp_table (oper1, oper2) VALUES (899825.28, 87760.52);
INSERT INTO temp_table (oper1, oper2) VALUES (58337.63, '');
INSERT INTO temp_table (oper1, oper2) VALUES (6022.02, '');
INSERT INTO temp_table (oper1, oper2) VALUES (478812.7, '');
INSERT INTO temp_table (oper1, oper2) VALUES (362582.04, '');
INSERT INTO temp_table (oper1, oper2) VALUES (730704.07, 46811.46);
INSERT INTO temp_table (oper1, oper2) VALUES (297195.85, '');
INSERT INTO temp_table (oper1, oper2) VALUES ('', '');
INSERT INTO temp_table (oper1, oper2) VALUES (225940.99, 15460.98);
INSERT INTO temp_table (oper1, oper2) VALUES (100003, '');
INSERT INTO temp_table (oper1, oper2) VALUES ('', '');
INSERT INTO temp_table (oper1, oper2) VALUES (1035226.75, 3090.69);
INSERT INTO temp_table (oper1, oper2) VALUES ('', '');
INSERT INTO temp_table (oper1, oper2) VALUES (2291515.43, 189103.72);
INSERT INTO temp_table (oper1, oper2) VALUES (2939022.9, 227428.59);
INSERT INTO temp_table (oper1, oper2) VALUES (2846209.76, 355510.22);
INSERT INTO temp_table (oper1, oper2) VALUES (856176.97, 121370);
INSERT INTO temp_table (oper1, oper2) VALUES (429038.18, 82913.64);
INSERT INTO temp_table (oper1, oper2) VALUES (7498, 1392);
INSERT INTO temp_table (oper1, oper2) VALUES (16572, 4212);
INSERT INTO temp_table (oper1, oper2) VALUES (10785617.86, 2077989.12);
INSERT INTO temp_table (oper1, oper2) VALUES (1786922.32, 252411.65);
INSERT INTO temp_table (oper1, oper2) VALUES (1979989.43, 466456.64);

COMMIT TRANSACTION;
PRAGMA foreign_keys = on;

Запрос
Код: sql
1.
2.
3.
SELECT oper1, oper2, oper1+oper2
--,typeof(oper1), typeof(oper2), typeof(oper1+oper2)
FROM test.temp_table


В результате выполнения запроса ожидал увидеть в поле "opr1+oper2" правильные суммы, с точностью до второго знака после запятой. Однако значения поля "opr1+oper2" в строках с номерами 10, 22, 41-43 вычисляется неверно.
Как добиться корректного результата? Где я ошибаюсь? Ткните, пожалуйста, носом.
...
Рейтинг: 0 / 0
Некорректный результат суммирования значений полей с типом REAL
    #39427133
Фотография VSVLAD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
idefix,

1) Что за значения в ваших строках 10, 22, 41-43? И какое значение получается? Записи в SQLite не нумеруются. У меня всё корректно просуммировалось, проверил результирующую выборку с вычисление суммы столбцов =oper1+oper2 в Excel

2) Использовать "" (пустую строку) это неправильно, либо null, либо число - остальные значения могут вызвать коллизии
...
Рейтинг: 0 / 0
Некорректный результат суммирования значений полей с типом REAL
    #39427217
idefix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
VSVLAD,

Спасибо за ответ. Похоже, менеджер SQLite-баз SQLiteStudio (я использовал версию 3.1.1) не верно отображает результат этого запроса. =(
Скриншот результата запроса в SQLiteStudio приложил. В строках, перечисленных в стартовом посте, результат вычисляется с точностью большей, чем два знака после запятой.
Этот же запрос, выполненный в оболочке от разработчиков SQLite дал корректный результат.

Спасибо за совет использовать NULL. Воспользуюсь. SQLiteStudio выброшу.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Некорректный результат суммирования значений полей с типом REAL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]