Beep
Beep

Reputation: 2823

Regular savings account interest calculation php

OK, I've had the same problem for a few weeks now and cant perfect it.

Aim

To build a regular deposit savings account system where it prints out the total balance at the current time.

Problem

The current equation I have:

If the interest is 6% with the user paying in 200 a month with compound being each month the balance would be after 6 months 1,220.61

I am getting 1217.13

I have tested different lengths of time and many different online calculators, my calculation is always less.

My code

<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 to sandbox https://3v4l.org/9X7OH

Upvotes: 1

Views: 1909

Answers (1)

Lutz Lehmann
Lutz Lehmann

Reputation: 26040

Setting

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

and computing

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

gives the result

1220.61037336530790

which is obviously what the online calculators worked with. It is slightly wrong, as for the nominal interest rate, the monthly compound factor should be

q = 1 + 0.06/12 = 1.005

resulting in a balance after 6 months of

1221.1758776293781

As you see, you got the formula almost right, it should be

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

since the rate is deposited at the start of the month, so the first rate gets compounded as r*(1+x)^6 and the last rate as r*(1+x). However, the second formula in the else branch does not make sense at all.

Upvotes: 1

Related Questions