Добрый день. Возникла небольшая
непонятка при работе с даными
хранящимися как numeric(15, 2). Диалект базы -
3, версия сервера WI-V6.3.2.4731 Firebird 1.5.
Пробелма в следующем: есть три
переменных типа 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) и использовал ее
следующем образом:
v_tmp = V_TPS_SUMM - V_TPS_WRITE_OFF_SUMM;
if(v_tmp < IP_SUMM) then
Exception DONT_HAVE_MANY;
В этом случае все нормально работет и
пока таких проблем не возникало. Так
вот вопрос "надолго ли собаке блин"? Все
таки как обстоят дела с точностью при
использовании numeric(15, 2) в 3 диалекте.
Можно этим пользоваться для хранения
денежных единиц или возможны
погрешности и лучше хранить в целых
числах и потом делить на 100?
Надеюсь на ваше понимание.
--~--~---------~--~----~------------~-------~--~----~
-~----------~----~----~----~------~----~------~--~---