我试图以myMonthlyPayment,myAnnualInterestRate和myPrincipal的形式接受用户输入,以便使用我在此帖子中附上的公式计算偿还债务所需的月数。我现在对于公式的日食是:
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);
似乎在你的解决方案中,你没有计算你的第二个myAnnualInterestRate/1200*myPrincipal
内的Math.log(...)
。您还在等式的下半部分在Math.log(...)
之外留下了一些计算。
如果您有一个在自然日志中执行操作的等式,当您将该等式转换为Java代码时,仍然需要在自然日志中执行操作:
ln(someNumber + 10)
将被转换为:
Math.log(someNumber + 10)
,
不:
Math.log(someNumber) + 10
希望这会有所帮助,祝你好运。 :)