> хранящимися как 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? Денежные единицы лучше хранить в банке :) --~--~---------~--~----~------------~-------~--~----~ -~----------~----~----~----~------~----~------~--~---

