> хранящимися как numeric(15, 2). Диалект базы -
> 3, версия сервера WI-V6.3.2.4731 Firebird 1.5.

А база случайно не имела ранее диалект 1 ?

> Пробелма в следующем: есть три
> переменных типа numeric(15, 2), в одной
> переменной хранится кол-во денег по
> счету V_TPS_SUMM, во второй - суммируются
> все траты по этому счету V_TPS_WRITE_OFF_SUMM, и
> в третей содержиться сумма, которую
> надо снять еще с этого счета IP_SUMM. Перед
> снятием денег делаю проверку
>
> if (V_TPS_SUMM - V_TPS_WRITE_OFF_SUMM < IP_SUMM) then
>    Exception DONT_HAVE_MANY;
>
> В этом случае иногда возникают
> ситуации, когда при V_TPS_SUMM - V_TPS_WRITE_OFF_SUMM
> равно IP_SUMM, всетаки вызывается Exception

А как проверяешь что оно равно? Может быть оно не равно.

> DONT_HAVE_MANY. Я  так понимаю, что в этом
> случае происходит сравнени вроде
> такого
> if (10.499999999999999999 < 10.50000000000001).
>
> Я сделал следующее. ввел еще одну
> переменую V_TMP NUMERIC(15,2) и использовал ее
> следующем образом:

Нужно проверить чем является на самом деле NUMERIC(15,2). Это может быть 
либо DOUBLE PRECISION (чего по идее быть не должно в 3 диалекте но всякое 
бывает), либо INT64. Это можно увидеть например, в сист таблицах - 
RDB$RELATION_FIELDS и RDB$FIELDS. Запрос писать не буду - лень, попробуй сам 
:) Интерсеуют поля RDB$FIELD_TYPE, RDB$FIELD_SUB_TYPE, RDB$FIELD_PRECISION

> Можно этим пользоваться для хранения
> денежных единиц или возможны
> погрешности и лучше  хранить в целых
> числах и потом делить на 100?

Денежные единицы лучше хранить в банке :)



--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---

Ответить