Попытка преобразовать эту формулу в арифметическое выражение в Java - PullRequest
0 голосов
/ 08 сентября 2018

formula

Я пытаюсь принять пользовательский ввод в форме myMonthlyPayment, myAnnualInterestRate и myPrincipal, чтобы вычислить количество месяцев, необходимое для погашения долга, используя формулу, которую я прикрепил к этому сообщению. Что я имею в затмении для формулы прямо сейчас:

monthsNeeded = ((Math.log(myMonthlyPayment) - Math.log(myMonthlyPayment) 
                - ((myAnnualInterestRate / 1200.0) * myPrincipal)) 
                  / ((Math.log(myAnnualInterestRate) / 1200.0) + 1.0));

Я должен получить выход 79 месяцев с входами, которые я использую, но вместо этого я получаю -62. Я знаю, что формула верна, я почти уверен, что где-то допустил ошибку при переводе на Java. Если бы кто-то мог указать на это, то был бы очень признателен!

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Я думаю, это то, что вы ищете:

monthsNeeded =  (Math.log(myMonthlyPayment) - Math.log(myMonthlyPayment - myAnnualInterestRate / 1200d * myPrincipal)) / Math.log(myAnnualInterestRate / 1200d + 1);

Похоже, что в вашем решении вы не рассчитывали свой myAnnualInterestRate/1200*myPrincipal внутри второго Math.log(...). Вы также оставили некоторые вычисления за пределами Math.log(...) в нижней половине вашего уравнения.


Если у вас есть уравнение, которое выполняет операцию внутри натурального журнала, когда вы конвертируете это уравнение в код Java, эту операцию еще нужно выполнить, внутри натурального журнала :

ln(someNumber + 10)

будет преобразовано в:

Math.log(someNumber + 10)

НЕ

Math.log(someNumber) + 10

Надеюсь, это поможет и удачи. :)

0 голосов
/ 08 сентября 2018

Итак, я исправил это, с примерами ввода и вывода. Я не приложил много усилий, чтобы сделать этот код красивым, но вы можете видеть, что даже разделение его на 3 части с использованием извлечения методов (хотя я не знал, как их назвать, не имея знаний в предметной области), облегчало понимание кода.

public class Example {
    public static void main(String[] args) {
        double myMonthlyPayment = 2000;
        double myAnnualInterestRate = 5;
        double myPrincipal = 200000;
        System.out.println(a(myMonthlyPayment));
        System.out.println(b(myPrincipal, myAnnualInterestRate, myMonthlyPayment));
        System.out.println(c(myAnnualInterestRate));
        double monthsNeeded = (a(myMonthlyPayment) - b(myPrincipal, myAnnualInterestRate, myMonthlyPayment))
                / c(myAnnualInterestRate);
        System.out.println(monthsNeeded);
    }

    private static double c(double myAnnualInterestRate) {
        return Math.log((myAnnualInterestRate / 1200.0) + 1);
    }

    private static double b(double myPrinicipal, double myAnnualInterestRate, double myMonthlyPayment) {
        return Math.log(myMonthlyPayment - (myAnnualInterestRate / 1200.0) * myPrinicipal);
    }

    private static double a(double myMonthlyPayment) {
        return Math.log(myMonthlyPayment);
    }
}
...