我有一个简单的计算,可以计算出储蓄账户的复合利率。
简单计算
$p = 300; // Starting amount
$i = 0.06; // Interest rate
$c = 12; // compound frequency set to monthly
$n = 2/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);
}
echo $vf;
问题是我需要一个确定帐户年龄的变量,因此我创建了日期差异代码,将现在的时间与帐户的开启日期进行比较。
日期差异代码
$join_date = $row->start_date; // 8th jan 2015
$date1 = new DateTime('now'); // 9th march 2016
$date2 = new DateTime($join_date); ?>
$n = (int)$date1->diff($date2)->format("%m"); // 2 months
因此,如果我将此代码用于变量$ n,则答案应该与原始代码相同。
未经修改的代码会给出答案 704.00749999999 (正确)
修改后的代码提供 5424.53898108 (错误)
所以问题是任何人都知道什么是错的?
答案 0 :(得分:2)
在您自己的脚本中,设置
$n = 2/12;
但修改后的代码集
$n = (int) $date1->diff($date2)->format("%m"); // == 2
显然,2/12 !== 2
,也许应该是
$n = ((int) $date1->diff($date2)->format("%m")) / 12;