Java ROI Compound Calculator - PullRequest
       1

Java ROI Compound Calculator

0 голосов
/ 22 февраля 2019

Я пытался создать программу, которая принимает:

  1. Начальное значение (в миллиардах)
  2. Скорость роста / год (в миллиардах)
  3. Покупная цена (в миллиардах)

И затем может рассчитать количество лет, которое потребуется, чтобы окупить инвестиции.Я смог сделать это с помощью алгоритма грубой силы.

Мне было интересно, есть ли способ сделать это более эффективно (способом, который больше похож на стандартную алгебру).

Мой код:

import java.util.Scanner;

public class ReturnOnInvestment {
  public static double initialValue;
  public static double growthRate;
  public static double purchasePrice;

  public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.println("     Return on Investment Calculator     ");
    System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
    System.out.print(" Starting Value (In Billions): ");
    initialValue = input.nextDouble();
    System.out.print(" Growth Rate (Per Year in Billions): ");
    growthRate = input.nextDouble();
    System.out.print(" Purchase Price (In Billions): ");
    purchasePrice = input.nextDouble();
    input.close();

    System.out.println("-----------------------------------------");
    System.out.println(" ROI Period: " + calculateYears(0) + " Years");
  }

  public static double calculateMoney(double years) {
    if(years < 1) return 0;
    return calculateMoney(years - 1) + initialValue + (growthRate * (years - 1)); 
  }

  public static double calculateYears(double years) {
    if(calculateMoney(years) >= purchasePrice) return Math.round(years * 100) / 100.0;
    return calculateYears(years + 0.01);
  }

}

1 Ответ

0 голосов
/ 22 февраля 2019

Да - вы можете использовать функцию логарифма для этого.

С учетом вашего Java-кода вы можете написать:

public static double yearsNeeded(double initialValue, double growthRate, double purchasePrice) {
    return Math.log(purchasePrice / initialValue) / Math.log(1 + growthRate);
}

с примером:

public static void main(String[] args) {
    System.out.println("Years to go from 100 to 150 with a growth rate of 5%: "
            + yearsNeeded(100, .05, 150));
}

В основном вы пытаетесь решить для "лет":

initialValue * (1 + growthRate) ^ years = purchasePrice

где ^ означает возведение в степень.

Вы можете переписать это на:

(1 + growthRate) ^ years = purchasePrice / initialValue

, что превращается в:

years = [1 + growthRate] log (purchasePrice / initialValue)

, где основанием журнала является "1 + growthRate".И журнал другой базы такой же, как журнал в любой базе, деленный на журнал базы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...