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

问题描述 投票:1回答:2

我试图以myMonthlyPayment,myAnnualInterestRate和myPrincipal的形式接受用户输入,以便使用我在此帖子中附上的公式计算偿还债务所需的月数。我现在对于公式的日食是:

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

我应该使用我正在使用的输入获得79个月的输出,但我得到-62。我知道这个公式是正确的,我几乎是肯定的我在把它翻译成Java的某个地方犯了一个错误。如果有人能够指出它会非常感激!

java formula arithmetic-expressions
2个回答
1
投票

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

0
投票

我想这就是你要找的东西:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.