2011-10-05 97 views
0

有以下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 1834.58

这是我值我期望从我的办公桌检查:4983453.613 这是我从我的方法得到的:5036155.12

驾驶我坚果。我已经尝试了其他一些在线功能;他们都没有工作!

+0

你到底在想什么? – Mob

+0

@Mob:退休基金的未来价值... – Mina

+0

我在猜测r =利率,n =期数,pv =现值,但是p是什么? – jprofitt

回答

0

这是一个舍入误差,但只有在0.0067不够精确。

对于$r = 0.0067我得到了和你一样的结果。

对于$r = 0.00666666666666666666666我得到你想要的结果。

我建议你通过$r = 1/150以获得最佳精度。

+0

你是对的。这是一个舍入错误。现在就对它进行测试,我获得了正确的价值。非常感谢。 – Mina

0

我刚刚通过一个Excel电子表格(将单元格A1设置为0,将单元格A2设置为=A1 + (A1*0.0067) + 1834.58,复制到A445(代表从0开始的444次迭代)最后一次迭代出现了5036155.12,因为您说的函数确实

你是如何计算4983453.613你说你希望你有双重检查你的方法有我没有得到在任何阶段

前三迭代出来为:??

1834.58 
3681.451686 
5540.697412 

和最后三为:

4965710.242 
5000815.08 
5036155.122 
0
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。