Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.06;
Скачать: CL | DM;

Вниз

Алгоритм расчета пени   Найти похожие ветки 

 
Вопрошающий   (2002-12-24 09:38) [0]

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

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


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


формула есть (правило сложных процентов). Кажется, так:
Если 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.


 
Anatoly Podgoretsky ©   (2002-12-24 10:22) [2]

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


 
Dona ©   (2002-12-24 10:26) [3]


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


 
Anatoly Podgoretsky ©   (2002-12-24 10:54) [4]

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


 
Lady D ©   (2002-12-24 11:11) [5]


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;


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

>> Lady D © (24.12.02 11:11)

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



 
Lady D ©   (2002-12-24 11:49) [7]

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;


 
ЮЮ ©   (2002-12-24 11:58) [8]

По одной формуле нам не надо: 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 12:07) [9]

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

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

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2003.01.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
3-14930
sndanil
2002-12-13 18:42
2003.01.06
Поле Time


14-15290
DeMoN-777
2002-12-17 00:52
2003.01.06
Помогите...


1-15023
jen_bond
2002-12-23 08:19
2003.01.06
Срочно нужен совет!


1-15040
alex134
2002-12-24 23:56
2003.01.06
DLL


7-15330
Олег_В
2002-07-11 00:57
2003.01.06
Как удалить EXEшник и на его место записать другой?