2017-03-08 10 views
1

그래서 나는 임금이 일정한 가치에 도달하는 데 걸린 수를 알아 보려고합니다. 예를 들어 제가 5000 달러부터 시작해서 10 % 이자율/년으로 $ 15000을 축적하려고합니다. 나는 이것이 내가 지금까지 무엇을했을되는 투자간단한이자 계산식을 사용하여 Java로 투자 기간 계산하기

의 기간이 얼마나 오래 찾으려

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 

어떻게 그냥 마지막 줄을 인쇄합니까?

+0

@Yusuf Ning Double을 사용하지 말고 대신 BigDecimal을 사용하십시오! 이중/부동은 재무/계산 용도로 사용되지 않습니다. – Alboz

+0

[자바 스타일 가이드에 따라 코드의 형식을 지정하고 변수의 이름을 지정하는 방법을 배우십시오.선행 중괄호가가는 곳은 종교적 전투입니다. 그 밖의 모든 것들이 자리하고 있습니다.] (https://github.com/twitter/commons/blob/master/src/java/com/twitter/common/styleguide.md)) –

답변

1

루프 (for 또는 while)를 사용해야합니다. 이 루프에서 연도를 증가시키고 새 값을 계산할 수 있습니다. 내가 변수의 일부를 변경했다

참고 :이 정수 루프를 원하기 때문에

  • , T의 유형 I은 각각 endValuefinalValueEndValueFinalValue을 변경 int
  • 입니다. 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 년 같은 것을 가질 수 없다는 뜻입니다. 이를 계산하려면 Henry의 솔루션을 사용해야합니다.

+1

'endValue * = 1 + rate;'를 실행하면이 작업을 단순화 할 수 있습니다. 그러나 이것은이 어플리케이션에서 중요하지 않습니다. – Henry

+0

@SilverNak 당신과 비슷한 일을했습니다. 그러나 한 줄만 인쇄하는 대신 전체 줄을 인쇄합니다. 내 코드를 내가 뭘 잘못하고 무엇을 고쳐서 최종 라인을 출력하는지 확인할 수 있습니까? –

+0

@YusufNing'System.out.println (...)'이 루프에 없어야합니다. 'while'의 닫는'}'뒤에 놓으면 제대로 작동합니다. – SilverNak

0

많이 틀림 ... 첫 번째로, IF 문 : 세미콜론으로 닫았 기 때문에 아무런 조치가 없습니다. 또한 endvalue는 부동 소수점 정확도 때문에 부분적으로 futurevaluals와 같지 않을 수 있으며 부분적으로는 전체 수년이 될 가능성이 적기 때문입니다. 그래서 내가 좋아하는 뭔가를 시도 할 것입니다 :

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를 계산하는 공식을.

3

쉬운 솔루션 수학 비트로이다

goal start과 마지막에 각각 상기와 rate 처음에 양이다
Math.log(goal/start)/Math.log(1+rate/100.0) 

백분율로 이자율이다.

+0

이것은 내가 더블 T = double (Math.log (FutureValue/investment)/Math.log (1 + rate)); 하지만 그다지 쓸모가 없었어 –

+0

왜 공식에'double (...) '을 써 봤어? 그냥 제거하십시오. – Henry