尝试将此公式转换为 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
希望这对您有所帮助,祝您好运。 :)
我正在尝试以 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
希望这对您有所帮助,祝您好运。 :)