расчет будущей стоимости не возвращает ожидаемый результат - PullRequest
0 голосов
/ 05 октября 2011

имеют следующую функцию FV

private static function fv($r,$n,$p,$pv=0)
{
    $sum = $pv;
    for ( $i=0;$i<$n;$i++ ) {
     $sum += ($sum * $r) + $p;
    }
    return $sum;
}

Вот значения, которые я передаю:

0,0067 444 1834,58

Это значение, которое я ожидаю от своей проверки стола: 4983453.613 Вот что я получаю по своему методу: 5036155.12

сводит меня с ума. Я пробовал кучу других функций онлайн; ни один из них не работает!

Ответы [ 3 ]

0 голосов
/ 05 октября 2011
private static function fv($r=0,$n=0,$pv=0)
{

    for ( $i=0;$i<$n;$i++ ) {
        $pv+=($pv*$r);
    }
    return $pv;
}

echo fv(0.0067,444,1834.58);

Немного прибавки, и вышесказанное должно помочь. $ P не был установлен в любой момент, поскольку вы можете использовать $ pv в функции без необходимости определять $ sum.*

0 голосов
/ 05 октября 2011

Это ошибка округления, но только в том случае, если 0.0067 недостаточно точен.

Для $r = 0.0067 Я получаю тот же результат, что и вы.

Для$r = 0.00666666666666666666666 Я получаю желаемый результат.

Я предлагаю вам передать $r = 1 / 150 для достижения максимальной точности.

0 голосов
/ 05 октября 2011

Я только что выполнил это через электронную таблицу Excel (установите ячейку A1 на 0, установите ячейку A2 на =A1 + (A1*0.0067) + 1834.58, скопируйте до A445 (представляющий 444 итерации, начиная с 0). Последняя итерация получается с 5036155.12, как вы говоритеФункция делает.

Как вы рассчитываете 4983453.613, что вы ожидаете? Вы дважды проверили там свой метод? Я не понимаю, на каком этапе.

Первые три итерации приходяткак:

1834.58
3681.451686
5540.697412

, а последние три как:

4965710.242
5000815.08
5036155.122
...