使用简单兴趣公式计算Java中的投资持续时间

时间:2017-03-08 10:40:53

标签: java loops finance rate computational-finance

因此,我尝试做的任务是找出委托人达到某个值所需的年数。比方说,例如我从5000美元开始,我希望以10%的利率/年累积15000美元。我想知道该投资的持续时间有多长

这是我到目前为止所做的事情

package com.company;

import java.util.Scanner;


public class InvestmentDuration {

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    System.out.println ("Initial Investment: ");
    double investment = input.nextDouble();

    System.out.println ("Rate as decimals: ");
    double rate = input.nextDouble();

    System.out.println ("Future Value: ");
    double FutureValue = input.nextDouble();

    double T = 0; //Initialise Duration//

    double EndValue = investment * Math.pow ((1+rate), T); //Formula of Simple Interest//

     while (EndValue < FutureValue) {
        T += 1.0;

         if (investment * Math.pow((1 + rate), T) == FutureValue);

        System.out.println("The Number of years it takes to accumulate $" + FutureValue + " is " + T + " years");
    }


}

输出:

The Number of years it takes to accumulate $15000.0 is 1.0 years
The Number of years it takes to accumulate $15000.0 is 2.0 years
The Number of years it takes to accumulate $15000.0 is 3.0 years
The Number of years it takes to accumulate $15000.0 is 4.0 years
The Number of years it takes to accumulate $15000.0 is 5.0 years
The Number of years it takes to accumulate $15000.0 is 6.0 years
The Number of years it takes to accumulate $15000.0 is 7.0 years
The Number of years it takes to accumulate $15000.0 is 8.0 years
The Number of years it takes to accumulate $15000.0 is 9.0 years
The Number of years it takes to accumulate $15000.0 is 10.0 years
The Number of years it takes to accumulate $15000.0 is 11.0 years
The Number of years it takes to accumulate $15000.0 is 12.0 years

如何仅打印最后一行?

3 个答案:

答案 0 :(得分:3)

最简单的解决方案是使用一些数学:

Math.log(goal/start) / Math.log(1+rate/100.0)

其中goalstart分别是结尾和开头的金额,rate是利率(百分比)。

答案 1 :(得分:1)

您需要使用循环(forwhile)。在此循环中,您可以递增年份并计算新值。

请注意,我对变量进行了一些更改:

  • 由于您想要一个整数循环,T的类型为int
  • 我分别将EndValueFinalValue更改为endValuefinalValue。 Java命名约定是camelCase,变量名的首字母很小。
  • 我认为yearsT更好,但这是我的个人观点。如果您决定留在T,至少应该是一个小写字母t

然后您可以使用以下代码。将endValue保存在变量中并不是必需的,因为它只使用一次。所以它可以内联。但我决定接近你的问题。

    int years = 0;

    double endValue = investment;

    while (endValue < futureValue) {
        years++;
        endValue = investment * Math.pow((1 + rate), years);
    }

您应该知道,在此循环之后,年数是endValue大于或等于futureValue的全年数。这意味着你不可能有3.5年的结果。如果你想计算,你应该使用亨利的解决方案。

答案 2 :(得分:0)

这里很不错...... 首先,你的IF语句:它没有动作,因为你用分号关闭了它。此外,最终值不太可能等于未来的估值,部分原因在于浮点精度,部分原因是不可能是整数年。 所以我会尝试类似的东西:

double T = 0.0;
while(investment * Math.pow ((1+rate), T) < FutureValue) {
   T += 1.0;
}
System.out.println ("The Number of years it takes to accumulate the Future Value is: " +T+);

或者你可以重新设定公式来直接计算T。