Re: чёртово округление
От | Maxim Boguk |
---|---|
Тема | Re: чёртово округление |
Дата | |
Msg-id | 493629B1.1030307@masterhost.ru обсуждение исходный текст |
Список | pgsql-ru-general |
А какой тип имеет p_abon_play ? Если любой из float то это совершенно нормальное поведение. Так как точно десятичные дроби в float в точном виде не представляются. (у вас на самом деле происходит следующее присваивание скорее всего: p_abon_pay := round(p_abon_pay::numeric(10,2), 2)::double; и именно на ::double происходит превращение в некрасивый вид) Надо объявить новую переменную типа numeric(10,2) и присваивать результат округления ей (логика округления вопрос отдельный... может надо round... может достаточно привести к типу numeric(10,2) ) И тд... вообще есть две школы подсчета таких вещей... первая говорит что все входные данные надо привести в нужную фиксированную точность и далее с ней работать... вторая говорит что надо все посчитать на максимальной точности а результат округлить до нужной вам точности. -- SY, Maxim Boguk engineer wrote: > Хай. > > Тривиальная задача, округлить сумму до копеек. > Вот фрагмент: > IF K_debug >= 2 THEN RAISE LOG ' FLOORing p_abon_pay[%] -> > p_abon_pay[%]', p_abon_pay, floor(p_abon_pay * 100.0) / 100.0; END IF; > p_abon_pay := floor(p_abon_pay * 100.0) / 100.0; > IF K_debug >= 2 THEN RAISE LOG ' ROUNDing p_abon_pay[%] -> > p_abon_pay[%]', p_abon_pay, round(p_abon_pay::numeric(10,2), 2); END > IF; > p_abon_pay := round(p_abon_pay::numeric(10,2), 2); > IF K_debug >= 2 THEN RAISE LOG ' p_balance[%] - p_abon_pay[%] -> > p_balance[%]', p_balance, p_abon_pay, p_balance - p_abon_pay; END IF; > > А в логе вижу такое: > > FLOORing p_abon_pay[24.193548387096776] -> p_abon_pay[24.190000000000001] > ROUNDing p_abon_pay[24.190000000000001] -> p_abon_pay[24.19] > p_balance[-29164.045435905457] - p_abon_pay[24.190000000000001] -> > p_balance[-29188.235435905455] > > ^^^^^^^^^^^^^^^^^ > То есть в лог сначала выдаётся округлённый результат, а после > присвоения его опять же переменной - снова становится "некрасивым". Чо > делать-то?
В списке pgsql-ru-general по дате отправления: