Вот ответ, который вы получите, когда выполните вычисление для secondTerm
с WolframAlpha , который будет использовать символические вычисления там, где это необходимо для достижения большей точности, чем математика с плавающей точкой в JavaScript: 4.46531771441003 × 10^ -788 .Это число настолько близко к нулю, что должно быть для вас предупреждением о том, что что-то не так с вашими вычислениями.
Результат, полученный из calcDisFac((7.75 / 100) / 12, 360)
, будет что-то вроде 2.049241445165735 × 10 ^ 788 , который, хотя технически не бесконечен, достаточно близок, когда речь идет о чем-токак ежемесячный платеж.Это, безусловно, значительно больше, чем 3300 всего, что у меня есть в кошельке, включая атомы.
Резервное копирование ... математика, которую вы делаете, не рассчитывает платежи по кредитам для любого типа кредита, который я когда-либо видел.Вы можете сами получить формулу для ссуды с фиксированной ставкой с фиксированными ежемесячными платежами и начальным балансом, или вы можете получить ее где-нибудь, как статья Википедии об ипотечных калькуляторах .Я думаю, что это выглядело бы примерно так:
function loanPayment(
initialBalance: number,
interestRatePerPeriod: number,
numberOfPayments: number
) {
const accrual = Math.pow(1 + interestRatePerPeriod, numberOfPayments);
const paymentRatio = (interestRatePerPeriod * accrual) / (accrual - 1);
return paymentRatio * initialBalance;
}
Математика с плавающей точкой в JavaScript должна быть более чем адекватной для выполнения этого расчета для разумных значений initialBalance
, interestRatePerPeriod
и numberOfPayments
.И обратите внимание, что вам нужен начальный баланс для математики, чтобы иметь какой-либо смысл (оплата будет пропорциональна первоначальному балансу).
Итак, работая в обратном направлении от желаемого результата 3300, если начальный остаток займа примерно равен 460000
, то вы получите:
console.log(loanPayment(460000, 7.75 / 100 / 12, 360)); /// 3295.496
Помогает ли это?Удачи!
Ссылка на код