Хорошо, у меня была такая же проблема в течение нескольких недель, и я не могу ее решить.
цель
Построить обычную систему сберегательного счета, где он распечатывает общий баланс в текущий момент.
проблема
Текущее уравнение у меня есть:
Если интерес 6% с пользователем, оплачивающим в 200 месяц с составом быть каждый месяц баланс будет через 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
ССЫЛКА на песочницу https://3v4l.org/9X7OH
настройка
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*(1+x)^6
и последний показатель как r*(1+x)
, Тем не менее, вторая формула в else
ветка не имеет смысла вообще.
Других решений пока нет …