#php #excel #function #financial
#php #excel #функция #финансовые
Вопрос:
есть следующая функция 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
Это значение, которое я ожидаю от моего deskcheck: 4983453.613 Это то, что я получаю от моего метода: 5036155.12
Сводит меня с ума. Я перепробовал кучу других функций в режиме онлайн; ни одна из них не работает!
Комментарии:
1. Что именно вы пытаетесь получить?
2. @Mob: будущая стоимость пенсионного фонда…
3. Я предполагаю, что r = процентная ставка, n = количество периодов и pv = текущая стоимость, но что такое p?
4. может ли быть так, что каждый раз, когда вы умножаете и добавляете его к сумме, вы получаете ошибку округления, потому что, когда вы делаете это на калькуляторе, оно округляется не так сильно? возможно, вам следует повторять сумму каждый раз, когда она повторяется, и посмотреть, есть ли ошибка округления.
5. @jprofitt p = текущее месячное значение
Ответ №1:
Это ошибка округления, но только в той мере, 0.0067
в какой она недостаточно точна.
Потому $r = 0.0067
что я получаю тот же результат, что и ваш.
Потому $r = 0.00666666666666666666666
что я получаю результат, который вы хотите.
Я предлагаю вам пройти $r = 1 / 150
для максимально возможной точности.
Комментарии:
1. вы правы. это ошибка округления. Просто протестировал его прямо сейчас, и я получаю правильное значение. Большое спасибо.
Ответ №2:
Я просто прогнал это через электронную таблицу 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
Ответ №3:
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.