Я использую 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.

Где я лажаю? У меня нет идей, и я даже не знаю, где еще искать неисправность. Спасибо!

php
0
Jeff 8 Июн 2018 в 16:18

1 ответ

Лучший ответ

В PHP «^» - это не оператор возведения в степень, а «побитовый Xor». «**» - эквивалентный оператор.

Также убедитесь, что приоритет операторов не отличается.

1
Sergiu Paraschiv 8 Июн 2018 в 13:22