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

Trying to convert this formula into an arithmetic expression in Java

我正在尝试以 myMonthlyPayment、myAnnualInterestRate 和 myPrincipal 的形式获取用户输入,以便使用我附加到此 [=20= 的公式来计算还清债务所需的月数].我现在在 Eclipse 中的公式是:

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

我应该使用我正在使用的输入得到 79 个月的输出,但我得到的是 -62。我知道公式是正确的,我几乎可以肯定我在将它翻译成 Java 时在某个地方犯了错误。如果有人能指出,将不胜感激!

所以我已经用示例输入和输出修复了它。 我并没有花太多精力让这段代码变得漂亮,但你可以看到,即使使用方法提取将它分成 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);
    }
}

我想这就是您要找的:

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

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


如果您有一个在自然对数内进行运算的方程,当您将该方程转换为 Java 代码时,仍需要进行运算,在自然对数中:

ln(someNumber + 10)

将转换为:

Math.log(someNumber + 10),

不是:

Math.log(someNumber) + 10

希望这对您有所帮助,祝您好运。 :)