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. Как с этим бороться?
Хвосты в поле Numeric(15,2)
Re: Хвосты в поле Numeric(15,2)
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 в разделе "Документация", "Типы данных"
по этому поводу читайте документацию и 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 в разделе "Документация", "Типы данных"
Re: Хвосты в поле Numeric(15,2)
Читали, попробовали перевести БД в диалект 3.kdv писал(а):1. ваша база в диалекте 1... оэтому numeric(15,2) хранится как double precision, а не как int64.
по этому поводу читайте документацию и faq
Однако в диалекте 3 тоже вылазят хвосты.
Re: Хвосты в поле Numeric(15,2)
пробовали "перевести" как? просто указанием, что у базы теперь диалект 3? Так от этого столбец double precision не превратится в int64.
в диалекте 3 совсем другие проблемы (если столкнетесь), которые к "хвостам" никак не относятся.
в диалекте 3 совсем другие проблемы (если столкнетесь), которые к "хвостам" никак не относятся.
Re: Хвосты в поле Numeric(15,2)
Мда... в общем, после перевода в 3 диалект пересоздали столбцы как положено.
Спасибо, проблема решена.
Спасибо, проблема решена.
Если можно, подскажите какие? и куда смотреть, если что.kdv писал(а):в диалекте 3 совсем другие проблемы (если столкнетесь), которые к "хвостам" никак не относятся.