2014-02-08 3 views
0

그래서 평균 샷 수를 계산하려면 얼마나 많은 샷을 찍었는지에 따라 중단 된 횟수를 나누십시오. 내 평균BigDecimal을 사용할 때 왜 계속 반올림합니까?

카운터 라운딩을 중지 할 수있는 방법 = 목표는 goalCounter는 = 목표

avg.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     BigDecimal avgCalc = new BigDecimal(counter/goalCounter); 
     tvDisplayAvg.setText("Goal Avg: " + avgCalc); 
    } 
}); 

그래서 내가 분할하고 소수를 얻기 위해 그것을 가지고 득점 차단 만 분할의 제한을 설정하는 방법이 천분의 일까지?

+2

카운터 및 goalcounter는 어떤 유형입니까? – Dima

답변

-1

countergoalCounter은 모두 int 일 수 있습니다. 나누면 둘 중 하나를 캐스팅 해보세요 (예 : counter/(double)goalCounter). 자바가 두 개의 정수를 나눈다면 결과도 정수가되기 때문입니다.

int가 아닌 경우 (즉, float 또는 double 유형) float 및 double 유형의 정밀도는 제한되어 있으며이 상황을 해결하기 위해 BigDecimal 클래스가 만들어졌습니다. 두 개의 BigDecimal (각 변수에 하나씩)을 만든 다음 avgCalc를 해당 지수에 할당합니다.

+0

큰 십진법 정밀도를 원한다면 double은 매우 나쁜 생각이다 – Dima

+0

내 대답은 두 부분으로되어있다. –

5

큰 십진수를 사용하는 경우 반올림은 counter/goalCounter 에서 발생합니다.

avg.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View v) { 

     BigDecimal c = new BigDecimal(counter); 
     BigDecimal g = new BigDecimal(goalCounter); 
     BigDecimal answer=c.divide(g); 

     tvDisplayAvg.setText("Goal Avg: " + amswer.toString()); 
    } 
});