cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk menyalin fungsi Excel FV dalam PHP?

Saya sedang menukar beberapa pengiraan yang agak rumit daripada hamparan Excel kepada PHP. Saya tersekat pada penukaran fungsi FV Excel, yang ditakrifkan seperti ini:

FV( interest_rate, number_payments, payment, PV, Type )

Saya telah mengusahakannya selama 2 jam sekarang dan saya pasti kehilangan sesuatu. Pada asasnya, saya perlu menyalin fungsi ini ke dalam fungsi PHP yang setara, mengambil semua parameter yang dinyatakan di atas.

Sebarang bantuan akan sangat dihargai.

P粉106301763P粉106301763428 hari yang lalu887

membalas semua(1)saya akan balas

  • P粉621033928

    P粉6210339282023-11-05 00:04:08

    Pustaka fungsi PHPExcel yang diubah suai sedikit:

    /**
     * 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);

    Kembali 85.818510876629

    // Ujian unit

    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);
            }
        }
    
    }

    balas
    0
  • Batalbalas