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 444 1834.58

这是我对桌面检查的期望值:4983453.613 这是我从我的方法中得到的值:5036155.12

使我抓狂。我已经在线尝试了许多其他功能;他们都没有工作!

4

3 回答 3

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
于 2011-10-05T14:33:35.387 回答
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。

于 2011-10-05T14:33:43.140 回答
0

这是一个舍入误差,但仅在0.0067不够精确的情况下。

因为$r = 0.0067我得到的结果与你得到的结果相同。

因为$r = 0.00666666666666666666666我得到了你想要的结果。

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

于 2011-10-05T14:39:39.853 回答