Хвосты в поле Numeric(15,2)

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
Owl
Сообщения: 3
Зарегистрирован: 20 июл 2011, 11:54

Хвосты в поле Numeric(15,2)

Сообщение Owl » 20 июл 2011, 12:17

Firebird 1.5

Имеется таблица table1 с полем summa - Numeric(15,2)
Делаю запрос
select key_field, sum(summa) from table1 group by key_field;

В результате при суммировании в некоторых строках вылазят хвосты, например 3.24000001 или 3.239999999

Далее в процедуре эта сумма заносится в другую таблицу с полем тоже Numeric(15,2), а хвосты отстаются!

Собственно вопросы:
1. Откуда вылазят хвосты?
2. Почему в поле с указанием разрядности вставляется такие числа?
3. Как с этим бороться?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Хвосты в поле Numeric(15,2)

Сообщение kdv » 20 июл 2011, 13:04

1. ваша база в диалекте 1, поэтому numeric(15,2) хранится как double precision, а не как int64.
по этому поводу читайте документацию и faq

2. double precision в IB/FB эквивалентно double в Delphi (целиком и полностью)

3. исходя из пункта 2, вам нужно внимательно прочитать
Неочевидные особенности вещественных чисел
http://www.delphikingdom.com/asp/viewit ... alogid=374
и
Загадки округления
http://www.delphikingdom.com/asp/viewit ... logID=1217

до кучи можно посмотреть еще
http://www.ibase.ru/devinfo/round.htm

Все эти статьи есть на ibase.ru в разделе "Документация", "Типы данных"

Owl
Сообщения: 3
Зарегистрирован: 20 июл 2011, 11:54

Re: Хвосты в поле Numeric(15,2)

Сообщение Owl » 20 июл 2011, 14:53

kdv писал(а):1. ваша база в диалекте 1... оэтому numeric(15,2) хранится как double precision, а не как int64.
по этому поводу читайте документацию и faq
Читали, попробовали перевести БД в диалект 3.
Однако в диалекте 3 тоже вылазят хвосты.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Хвосты в поле Numeric(15,2)

Сообщение kdv » 21 июл 2011, 11:08

пробовали "перевести" как? просто указанием, что у базы теперь диалект 3? Так от этого столбец double precision не превратится в int64.
в диалекте 3 совсем другие проблемы (если столкнетесь), которые к "хвостам" никак не относятся.

Owl
Сообщения: 3
Зарегистрирован: 20 июл 2011, 11:54

Re: Хвосты в поле Numeric(15,2)

Сообщение Owl » 22 июл 2011, 16:17

Мда... в общем, после перевода в 3 диалект пересоздали столбцы как положено.
Спасибо, проблема решена.
kdv писал(а):в диалекте 3 совсем другие проблемы (если столкнетесь), которые к "хвостам" никак не относятся.
Если можно, подскажите какие? и куда смотреть, если что.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Хвосты в поле Numeric(15,2)

Сообщение kdv » 23 июл 2011, 01:13


Ответить