-
Здравствуйте, Не могу понять где ошибка, наверно в формулах
1. Есть формула расчета аннуитета. Формула «А». function EvalMonthPercent(AYearPercent: Integer): Double;
begin
Result := (AYearPercent / 12) / 100;
end; function EvalAnnua(ACreditSize: Currency; AYearPercent: Integer; AMonthPeriod: Integer): Currency;
var
Numerator, Denominator: Double;
MonthPercent: Double;
begin
Result := 0;
MonthPercent := EvalMonthPercent(AYearPercent);
Numerator := Power(1 + MonthPercent, AMonthPeriod) * MonthPercent;
Denominator := Power(1 + MonthPercent, AMonthPeriod) — 1;
if Denominator <> 0 then
Result := ACreditSize * (Numerator / Denominator);
end; В ней особых сомнений нет, взял из экселевского файла из банка. В экселе она выглядела так: =F4*((1+F6/12)^F5*F6/12)/((1+F6/12)^F5-1) Она дает такой расчет:
Сумма кредита
2 797 689р.
Дата
25.03.2008
Дата выплаты Остаток Гашение Проценты Аннуитет
25.04.2008 2 769 412,15р. 28 276,85р. 44 296,74р. 72 573,59р.
Ну и так далее
А есть еще вот такая формула: Формула «Б». function EvalPariodCreditPercent(ACurrentBalance: Currency; AYearPercent: Integer;
LastPaymentDate, CurrentDate: TDateTime): Currency;
var
DayPercent: Double;
DaysCount: Integer;
begin
DayPercent := (AYearPercent / 365)/100;
DaysCount := DaysBetween(CurrentDate, LastPaymentDate);
Result := (ACurrentBalance * DayPercent) * DaysCount;
end; Она вычисляет проценты набежавшие с прошлого платежа. Проблемма вот в чем. Человек приходит платить 25.04.2008 и платит 72 573,59р.(точно аннуитет). Так вот Формула «Б» расчитывает проценты не так как та, что в аннуитете. Получается: Дата выплаты Остаток Гашение Проценты
25.04.2008 2 770 261,68р. 27 427,32р. 45 146,27р. Если сравнить: Остаток Гашение Проценты
«А» 2 769 412,15р. 28 276,85р. 44 296,74р.
«Б» 2 770 261,68р. 27 427,32р. 45 146,27р. Получается разница в 849,53р. То есть человек как-бы не доплатил, хотя заплатил правильно. * Сумма бывает разной как в плюс, так и в минус.Вопросы: 1. Что не так с формулой «Б»? очень хочется понять откуда разница. 2. Можноли изменить формулу «Б», чтобы она работала правильно и как? 3. Если 2 невозможно, то где взять описание сценариев работы банка, например, при работе с кредитами.
-
интересно... а ты не забыл что год високосный? или это не влияет на расчеты?
-
чо-то это круто слишком для форума :) имхо я бы постарался проблему выделить более узко.
-
> интересно
а ты не забыл что год високосный? или это не > влияет на расчеты?
Незнаю, ты думаешь дело в DayPercent := (AYearPercent / 365)/100; ? Пробовал и 364 ставить суммы несхождения меняется, но незначительно рублей на сто в данном примере
Или ты о чем?
-
> я бы постарался проблему выделить более узко.
Рад бы с узить, но как?
У меня по этому поводу есть печальное подозрение, но пока хочу послушать мнение уважаемых посетителей форума
-
366 дней, а не 364. просто это первое что мне в глаза бросилось...
-
Ну вот одна из претензий. Я знал, что есть аннуитет, но забыл. Т.е. надо бы меня посветить в предметную область.
-
еще проблема может быть в работе DaysBitween... может для верного расчета нужно на один день больше...
-
> Kolan ©
> Palladin © (02.05.08 00:31) [5]
В dateutils есть функции для точных вычислений.
-
> if Denominator <> 0 then
а 0 всегда точно представляется в Double (просто не помню)?
-
> 366 дней, а не 364. просто это первое что мне в глаза бросилось
Я же говорю это не то, при 366 получается 726,18р
> Т.е. надо бы меня посветить в предметную область.
Это связано с кредитами, банковским делом. Все просто, но названия и понятия надо знать. АННУИТЕТОМ является ежемесячная/ежегодная денежная сумма определенного размера, выплачиваемая кредитору в погашение по лученного от него займа, включая проценты. http://ru.wikipedia.org/wiki/%D0%90%D0%BD%D0%BD%D1%83%D0%B8%D1%82%D0%B5%D1%82То есть если ты взял кредит, то каждый месяц должен платит аннуитет. Но от месяца к месяцу проценты и гашение в аннуитете распределяется поразному. Сначала много отдаем процентов, в конце, на оборот, мало процентов и много гасим
В конкр примере: Взносы Сальдо Гашение осн. долга Проценты за кредит Аннуитет
1 2 769 412,15 28 276,85 44 296,74 72 573,59
2 2 740 687,58 28 724,57 43 849,03 72 573,59
3 2 711 508,20 29 179,37 43 394,22 72 573,59
4 2 681 866,82 29 641,38 42 932,21 72 573,59
5 2 651 756,12 30 110,70 42 462,89 72 573,59
6 2 621 168,66 30 587,46 41 986,14 72 573,59
7 2 590 096,91 31 071,76 41 501,84 72 573,59
8 2 558 533,18 31 563,73 41 009,87 72 573,59
9 2 526 469,69 32 063,49 40 510,11 72 573,59
10 2 493 898,54 32 571,16 40 002,44 72 573,59
11 2 460 811,67 33 086,87 39 486,73 72 573,59
12 2 427 200,92 33 610,74 38 962,85 72 573,59
итд на 60 мес.
|