일부값 / 전체값 * 100 X
100d * 일부값 / 전체값 O
long part = 1; long total = 3; double ok = 100d * part / total; double no = part / total * 100; System.out.println(ok); System.out.println(no); 33.333333333333336 0.0
1 / 3 = 0.333333 이다.
'part / total' 은 항상 정수형을 반환한다. part과 total의 타입이 long 타입이기 때문에 묵시적 형변환을 통해 끝수를 버리고 long타입으로 변환 된다.
만약 part나 total이 double 타입이라면 정상적으로 0.33333을 반환한다.
그래서 처음 100d를 통해 double 타입으로 반환하라고 명시 하면 오류 없이 퍼센트 결과를 얻을 수 있다.
댓글 없음:
댓글 쓰기