2013-11-03 5 views
0

손실 가능성이 내 코드입니다 :오류 : 정밀

static int compoundBalance(double db, double dbTwo, double dbThree) { 
if(dbThree == 0) return db; 
return (1 + dbTwo)*compoundBalance(db, dbTwo, dbThree-1); 
} 

그리고 나는이 두 가지 오류를 얻을. 나는 그들을 어떻게 만들지 모르겠다. 어떤 지침? 고맙습니다.

Factorial.java:60: error: possible loss of precision 
    if(dbThree == 0) return db; 
          ^
    required: int 
    found: double 

Factorial.java:61: error: possible loss of precision 
    return (1 + dbTwo)*compoundBalance(db, dbTwo, dbThree-1); 
        ^
    required: int 
    found: double 
2 errors 
+0

함수가 정수 값만 반환하는 경우 'compoundBalance()'에서이 배정도 산술 연산을 수행하는 것이 무엇입니까? 아마도이 함수를'static double compoundBalance()'라고 선언 했는가? –

답변

0

메서드 서명은 실제로 double을 반환 할 때 int를 반환 함을 나타냅니다. 당신은 당신의 서명을 변경하여이 문제를 해결할 수 있습니다

static double compoundBalance(double db, double dbTwo, double dbThree) { 

이 오류는 6.9를 반환하는 것을 의미 할 때 (6) 같은 것을 돌려 중지하는 것입니다. 이 동작을 정말로 원하면 서명을 변경하는 대신 반환 값을 int로 캐스팅 할 수 있습니다.

static int compoundBalance(double db, double dbTwo, double dbThree) { 
    if(dbThree == 0) return (int)db; 
    return (int)((1 + dbTwo)*compoundBalance(db, dbTwo, dbThree-1)); 
    } 
}