尝试将此公式转换为Java中的算术表达式

时间:2018-09-07 22:53:58

标签: java formula arithmetic-expressions

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 :(得分:1)

所以我用示例输入和输出修复了它。 我并没有付出太多的努力来使代码更漂亮,但是您可以看到,即使使用方法提取将代码分为三部分(尽管我不知道如何命名它们,也缺乏领域知识)也使代码更易于理解。

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);
    }
}

答案 1 :(得分:0)

我认为这是您想要的:

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

在您的解决方案中,您似乎并没有在第二个myAnnualInterestRate/1200*myPrincipal中计算Math.log(...)。您还留了方程式下半部分Math.log(...)之外的一些计算。


如果您有一个在自然对数内进行运算的方程式,则将该方程式转换为Java代码时,仍需要在自然对数内进行运算[em] :< / strong>

ln(someNumber + 10)

将被转换为:

Math.log(someNumber + 10)

否:

Math.log(someNumber) + 10

希望这会有所帮助,祝你好运。 :)