我正在使用PHP 7.2。我正在将Excel电子表格转换为财务分析应用程序。对于其中一个计算,我实际上是在复制单元格中的文本,将其粘贴到我的PHP应用程序中,然后用变量替换单元格引用。没有使用内置的Excel函数 - 它只是一个简单的公式。而且我并没有在实际上改变公式的结构 - 它是电子表格中文字的文字复制/粘贴。这是Excel中的公式:
=(A38*(1-(1+(G38/U38))^-N38)/(G38/U38))/((1+(G38/U38))^(((AB38-$I$5)/(365/U38))-1))
这就是它在我的应用程序中的转换方式:
$x = ($payment_amount * (1 - (1 + ($discount_rate /
$payments_per_year))^-$payments_in_series) /
($discount_rate / $payments_per_year)) /
((1 + ($discount_rate / $payments_per_year))^((($days_between_dates) /
(365 / $payments_per_year)) - 1));
我和Excel中的那个之间存在一个细微差别,那就是(AB38-$I$5)
。在Excel中,这会计算两个日期之间的天数。在PHP中,我使用DateTime
查找两个日期的天数差异,并将其替换为$days_between_dates
。我已经验证PHP符合Excel计算的内容。
我们假设这些值:
$payment_amount = 30000;
$discount_rate = .08;
$payments_in_series = 20;
$payments_per_year = 1;
$days_between_dates = 398;
在Excel中,我得到以下计算值:292502.06
在PHP中,我得到以下计算值:-7500000
。当我使用var_dump
检查结果时,会将其标识为float
。
我将此功能插入WolframAlpha并从Excel获得相同的结果。
我在Ideone中尝试了相同的计算,并得到与PHP计算相同的结果。
我搞砸了?我完全没有想法,甚至不知道在哪里进行故障排除。谢谢!