Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Алгоритм расчета пени


Вопрошающий ©   (2002-12-24 09:38:00) 

Есть ли способ наиболее просто расчитать пени за несколько дней
А то использовать цикл и гонять в нем умножения и сложения не очень рационально.

Требуеться решить
есть долг к примеру 20 дней, долг 100руб за каждый день прострочки 0,3% от долга, т.е за 1 день 100+(100*0.3)=130
2 день 130+(130*0,3)=169 и т.д до 20 дня


Бурундук   (2002-12-24 12:15:00) [1]

2Вопрошающий - тебе одного дефолта мало?

Объясняю популярно:
0.3 - это 30%,
а 0.3% = 0.003


Lady D   (2002-12-24 12:07:00) [2]

2 ЮЮ © (24.12.02 11:58)>
Был вопрос:

> Есть ли способ наиболее просто расчитать пени за несколько
> дней
> А то использовать цикл и гонять в нем умножения и сложения
> не очень рационально.

Я всего лишь предложила альтернативу циклу. А что предложили вы?


ЮЮ   (2002-12-24 11:58:00) [3]

По одной формуле нам не надо: Sn = S*(1+p)^n

Да и простом цикле типа
Sum := Sum0;
Prc := 0.3;
Peny := 0;
for i := 1 to 20 do
Sum := Round(Sum * (1 + Prc));
Peny := Sum - Sum0;
нам неинтересно

Нам рекурсию подавай :-)


Lady D   (2002-12-24 11:49:00) [4]

Identifikator Borna (24.12.02 11:29)
> Эта функция работает так как нужно?

Исходя из исходных данных :-)

Проверьте сами:

procedure TForm1.Button1Click(Sender: TObject);
var
ADay: DWORD;
ASum: currency;
APeny: double;
begin
ADay := StrToInt(Edit1.text);
ASum := StrToCurr(Edit2.Text);
APeny := 0.3;
CalcSumm(APeny, ASum, ADay);
Label1.Caption := FloatToStr(ASum);
end;


Identifikator Borna   (2002-12-24 11:29:00) [5]

>> Lady D © (24.12.02 11:11)

Эта функция работает так как нужно?


Lady D   (2002-12-24 11:11:00) [6]


function CalcSumm(APeny: double; var ASum: currency; ADay: DWORD): boolean;
begin
ADay := ADay - 1;
ASum := ASum + (ASum * APeny);
Result := ADay > 0;
if Result then CalcSumm(APeny, ASum, ADay);
end;


Anatoly Podgoretsky   (2002-12-24 10:54:00) [7]

Пени на пени, начиная со следующего дня, так любого можно без штанов оставить.


Dona   (2002-12-24 10:26:00) [8]


В каком смысле зверские?


Anatoly Podgoretsky   (2002-12-24 10:22:00) [9]

Такие зверсткие условия


Dona   (2002-12-24 10:05:00) [10]


формула есть (правило сложных процентов). Кажется, так:
Если S - начальная сумма, Р - приведенная процентная ставка (в твоих вычислениях, кстати, ставка 30%, а не 0,3%. Если 0,3%, то умножать надо на 0,003), то
1 день S1 = S+S*p = S*(1+p)
2 день S2 = S1+S1*p = S1*(1+p) = S*(1+p)*(1+p)=S*(1+p)^2
...
n день Sn = S*(1+p)^n

Приведенная ставка Р = Ставка в % / 100.


Наверх

Титульная страница Поиск, карта сайта Написать письмо