Метки записи: |
Добрый день!
Сделал счета и акты.
Делал округление по образцу Terrasoft "Счет-фактура НДС" :
master_data
begin
SQLRound.Close;
Value := [DialogForm.qr1."Price"];
Digit := 2;
SQLRound.Open;
fPrice := [DialogForm.SQLRound."Result"];
fAmount := [DialogForm.qr1."Quantity"] * fPrice;
AmountWithoutNDS := AmountWithoutNDS + fAmount;
Quant:= [DialogForm.qr1."Quantity"];
QuantSum:= QuantSum + Quant;
end
master_footer
begin
SQLRound.Close;
Value := AmountWithoutNDS * 0.18;
Digit := 2;
SQLRound.Open;
AmountNDS := [DialogForm.SQLRound."Result"];
AmounD := AmountWithoutNDS + AmountNDS;
end
Счет у меня такой:
колич-во | цена | Сумма |
-------------------------------
1 73366,97 73366,97
-------------------------------
Итого: 73366,97
-------------------------------
Итого НДС: 13206,0546
-------------------------------
Всего: 86573,0246
-------------------------------
Так вот после округления, например, Итого НДС: 13206,0546 получается
13206,05 руб., а желательно 13206,06 руб. - т.е. в сторону увеличения.
Что сделано не так?
Подскажите как быть.
Комментарии
На самом деле проблема с округлением в FastReport поднималась не раз... в форуме есть несколько топиков...
Как стандартный выход могу предложить округлять возвращаемые значения до 2-го знака еще в запросе, тогда третий знак нигде не вылезет и все должно получатся правильно.
Non noceo.
Прикольно, а вот можно вопрос
цитата автора "13206,0546 получается
13206,05 руб., а желательно 13206,06 руб."
по каким правилам округления -,0546 до двух знаков должно быть 0,06??? Это что методом нарастающего итога получается кто-то округляет? Если мне не изменяет память округляется ТОЛЬКО число стоящее перед последним знаком, до которого надо окрулить, а остальная часть просто отбрасывется...., т.е. в данном случае округляем число .054, а по всем правилам тут будет .05! Я бы еще понял вопрос с округлением .055 или 0.045, но тут по моему вопросов возникать не должно.
Вы не поняли, тут не в том дело... тут проблема в том, что используемся два разных подсчета SUM(ROUND(X)) и ROUND(SUM(X)) и возможны случаи, что они не совпадают, когда после запятой больше знаков, чем нужно для округления...
Non noceo.
Non noceo.
Ну, тогда, сорри, :-)