Russian Qt Forum

Qt => Базы данных => Тема начата: Пытон от Сентябрь 29, 2013, 18:09



Название: QtSql.QSqlTableModel + SQLite. Суммы с длиннючими дробными частями...
Отправлено: Пытон от Сентябрь 29, 2013, 18:09
БД SQLite.
В ней табличка, одно из полей, допустим, summa содержит числа означающие денежные суммы. В этом поле нет чисел с более чем двумя цифрами после запятой. При создании таблицы этому полю был назначен тип Numeric. (Хотя SQLite'а, насколько я знаю, это особо не волнует)

Исходная Таблица:
summa, group_a
12.30     a
10          a
12.5       b
23.45     b

В общем, я написал представление хранимое в самой БД (view). Этот запрос выдаёт таблицу с суммами для групп. В окне результата запросов менеджера SqliteMan всё получается так как надо (может быть, он автоматически округление делает?):

Итог представления:
summa, group_a
22.30     a
35.95     b

Когда же я помещаю результат этого запроса (view) в QSqlTableModel, эти суммы превращаются в что-то типа 22.3000000000004 или 35.949999999996

Чего это за безобразие и как этого избежать? Мне эти суммы надо сложить для итоговой суммы.
Мне бы именно поле Numeric с точностью до двух знаков после запятой как в ФоксПро.

П.С. Язык программирования - Питон.



Название: Re: QtSql.QSqlTableModel + SQLite. Суммы с длиннючими дробными частями
Отправлено: mutineer от Сентябрь 30, 2013, 00:09
Это безобразие называется "внутреннее представление чисел с плавающей запятой". Исправляется, например, округлением. Или хранением чисел в целом виде (домноженными на 100)


Название: Re: QtSql.QSqlTableModel + SQLite. Суммы с длиннючими дробными частями...
Отправлено: Пытон от Сентябрь 30, 2013, 05:40
Это внутреннее безобразие SQLite или QSqlTableModel?


Название: Re: QtSql.QSqlTableModel + SQLite. Суммы с длиннючими дробными частями...
Отправлено: mutineer от Сентябрь 30, 2013, 08:41
Это внутреннее безобразие двоичных компьютеров