我正在尝试以myMonthlyPayment,myAnnualInterestRate和myPrincipal的形式接受用户输入,以便通过使用我在本文中附上的公式来计算还清债务所需的月数。我现在在该公式中的日食是:
monthsNeeded = ((Math.log(myMonthlyPayment) - Math.log(myMonthlyPayment)
- ((myAnnualInterestRate / 1200.0) * myPrincipal))
/ ((Math.log(myAnnualInterestRate) / 1200.0) + 1.0));
我使用的输入应该得到79个月的输出,但是我却得到-62。我知道公式是正确的,我几乎肯定我在将其转换为Java时在某个地方犯了一个错误。如果有人指出这一点,将不胜感激!
答案 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
希望这会有所帮助,祝你好运。 :)