2016-03-09 1 views
1

Хорошо, у меня была такая же проблема в течение нескольких недель, и я не мог ее улучшить.Расчет процентных ставок по обычным сберегательным счетам php

Aim

Чтобы построить регулярный сберегательный депозитный счет системы, в которой она выводит общий баланс на текущий момент времени.

Проблема

Текущее уравнение у меня есть:

Если интерес 6% с пользователем оплачивая в месяц с соединением является каждый месяц баланс будет после того, как 6 месяцев 1,220.61

Я получаю 1217.13

Я тестировал разные длины времени и множество различных онлайн-калькуляторов, мой расчет всегда меньше.

Мой код

<h2>Total Balance To Date</h2> 
    <?php 

    $p = 0; // Starting amount 
    $i = 0.06; // Interest rate 
    $c = 12; // compound frequency set to monthly 
    $n = 6/12; // Current time invested set to 6 months 
    $r = 200; // Monthly investment is 200 

    $x = $i/$c; 
    $y = pow((1 + $x), ($n * $c)); 

    if($p!=0) 
    { 
     $vf = $p * $y + ($r * ($y - 1)/$x); 
    } 
    else 
    { 
     $vf = 1 + $y + ($r * ($y - 1)/$x); 
    } 

    ?> 

    <p>£<?php echo round($vf, 2, PHP_ROUND_HALF_UP); ?></p> // Comes out at 1217.13 

LINK в песочницеhttps://3v4l.org/9X7OH

+0

Я получаю 1215.10, поэтому ... –

+0

Я получаю 1020.17587763 до округления ... –

+0

@MarcB: Похоже, вы забыли рассчитать в прошлом месяце, я думаю. –

ответ

1

Установка

q = pow(1.06 , 1.0/12) = 1.0048675505653430 

и вычисления

200*(q+q^2+q^3+q^4+q^5+q^6) = 200*q*(q^6-1)/(q-1) 

дает результат

1220.61037336530790 

, который, очевидно, что онлайн-калькуляторов работал. Это немного не так, как для номинальной процентной ставки, ежемесячный коэффициент соединения должен быть

q = 1 + 0.06/12 = 1.005 

в результате баланса через 6 месяцев

1221.1758776293781 

Как вы видите, вы получили формула почти правее, это должно быть

$vf = $p * $y + ($r * (1 + $x) * ($y - 1)/$x); 

, так как ставка депонирована в начале месяца, поэтому первый r ate получает составленный как r*(1+x)^6 и последний рейтинг как r*(1+x). Однако вторая формула в ветке else не имеет смысла.

+0

это выглядит фантастически, я работаю над чем-то атмом. но позже я попробую это, и когда он работает, плохо с радостью примите ваш ответ, еще раз спасибо. – Beep

+0

Я могу подтвердить, что он работает блестяще, поэтому проскальзывание, если утверждение не требуется, спасибо. – Beep