84669 人学习
152542 人学习
20005 人学习
5487 人学习
7821 人学习
359900 人学习
3350 人学习
180660 人学习
48569 人学习
18603 人学习
40936 人学习
1549 人学习
1183 人学习
32909 人学习
我正在将一些相当复杂的计算从 Excel 电子表格转换为 PHP。我被困在 Excel 的 FV 函数的转换上,它是这样定义的:
FV( interest_rate, number_payments, payment, PV, Type )
我已经为此工作了 2 个小时,我肯定遗漏了一些东西。本质上,我需要将此功能复制到等效的 PHP 函数中,并采用上述所有参数。
任何帮助将非常感激。
对 PHPExcel 函数库稍作修改:
/** * FV * * Returns the Future Value of a cash flow with constant payments and interest rate (annuities). * * @param float $rate Interest rate per period * @param int $nper Number of periods * @param float $pmt Periodic payment (annuity) * @param float $pv Present Value * @param int $type Payment type: 0 = at the end of each period, 1 = at the beginning of each period * @return float */ function FV($rate = 0, $nper = 0, $pmt = 0, $pv = 0, $type = 0) { // Validate parameters if ($type != 0 && $type != 1) { return False; } // Calculate if ($rate != 0.0) { return -$pv * pow(1 + $rate, $nper) - $pmt * (1 + $rate * $type) * (pow(1 + $rate, $nper) - 1) / $rate; } else { return -$pv - $pmt * $nper; } } // function FV() echo FV(0.0149562574418, 4, 43.875, -250);
返回 85.818510876629
// 单元测试
class ExcelTest extends \PHPUnit_Framework_TestCase { public function test_it_calculates_fv_value() { $test_data = [ [ 0.005, 10, -200, -500, 1, 2581.4033740601 ], [ 0.01, 12, -1000, null, null, 12682.503013197 ], [ 0.009166666667, 35, -2000, null, 1, 82846.246372418 ], [ 0.005, 12, -100, -1000, 1, 2301.4018303409 ], [ 0.004166666667, 60, -1000, null, null, 68006.082841536 ], [ 0.025, 16, -2000, 0, 1, 39729.460894166 ], [ 0.0, 12, -100, -100, null, 1300 ] ]; $test_case_id = 0; foreach($test_data as $test_case) { $test_case_id++; list($rate, $nper, $pmt, $pv, $type, $expected_result) = $test_case; $this->assertEquals($expected_result, Excel::FV($rate, $nper, $pmt, $pv, $type), "Test case $test_case_id failed", 0.0000001); } } }
对 PHPExcel 函数库稍作修改:
返回 85.818510876629
// 单元测试