/**
* 计算收益 - 揭秘养老金骗局 保守算法,减少一年收益
* @param int $money 每次投钱金额
* @param float $rate 利率
* @param int $age 开始投钱年龄
* @param int $until 结束投钱年龄
* @param int $limit 领钱结束年龄
* @param string $model 模式 y-年 m-月 w-周
* @return array
*/
function get_income(int $money, float $rate, int $age, int $until, int $limit, string $model = 'm'): array
{
$data = [];
$principal = 0; // 本金
$start_income = 0; // 中途收益 利滚利
$times = 0; // 每年交钱次数
switch ($model) {
case 'y':
$times += 1;
break;
case 'm':
$times += 12;
break;
case 'w':
$times += floor(365 / 7); // 舍去不足一周
break;
default:
die('参数错误');
}
for ($i = $until - $age; $i > 0; --$i) {
$tmp = pow($rate, $i - 1); // 保守算法,减少一年收益
for ($j = 0; $j < $times; ++$j) {
$principal += $money;
$start_income += $money * $tmp;
}
}
$end_income = $start_income * pow($rate, $limit - $until); // 最终收益 利滚利
$data['principal'] = $principal;
$data['start_income'] = $start_income;
$data['end_income'] = $end_income;
return $data;
}
$money = 100; // 每次投钱金额
$rate = 1.036; // 利率
$age = 28; // 开始投钱年龄
$until = 60; // 结束投钱年龄
$limit = 85; // 领钱结束年龄
$data = get_income($money, $rate, $age, $until, $limit);
vd($data);
运行结果 :