【发布时间】:2018-06-08 13:18:15
【问题描述】:
我正在使用 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 计算相同的结果。
我在哪里搞砸了?我完全没有想法,甚至不知道还有哪里可以排除故障。谢谢!
【问题讨论】:
-
你应该使用pow而不是^
标签: php