2015-01-25 5 views
9

Java에서 RoundingMode.HALF_EVEN을 사용해야하는 상황을 상상할 수 없습니다.HALF_EVEN 반올림이란 무엇입니까?

이 반올림 모드는 무엇입니까? 언제 사용하고 싶습니까?

실례를 들어주세요.

답변

8

여러 번의 반올림 연산을 수행하고 누적 결과가 HALF_UP 또는 HALF_DOWN처럼 실제 평균이되고 위아래로 왜곡되지 않도록하려는 경우 유용합니다.

특히 통계적 분석 (비 랜덤 평균 시스템으로 오염 된 결과를 원하지 않는 경우)이나 임의의 평균화를 원하는 상황에 유용합니다.

17

RoundingMode.HALF_EVEN은 다른 반올림 알고리즘과 마찬가지로 항상 하나의 실행만으로 다음 숫자로 반올림됩니다. 반올림 횟수가 두 숫자 (2.5, 42.5, -4.5) 사이에있는 경우 반올림하지 않습니다. 그 대신에 이웃에게 그것을 둥근다. 몇 가지 예이다 :

  • 3.2 -> 3
  • 3.4 -> 3
  • 3.5 -> 4
  • 4.5 -> 4
  • 5.5 -> 6
  • -7.5 -> -11
2

동작은 잘 Javadoc에서 설명

은 "가장 가까운 이웃" 모두 않는 이웃 등거리으로 반올림 모드를 반올림

,이 경우, 짝수 이웃 대한 라운드있다.

그래서 당신이 호출 할 때, 바로 4와 5 사이의 숫자의 범위의 중간에 해당되는 수치 4.5, 주어진 :

BigDecimal value1 = new BigDecimal("4.5").setScale(RoundingMode.ROUND_HALF_EVEN); 

런타임은 너무 반올림 할 이웃 알아낼 필요가있다 , 일명 4 시까 지 5 시까 지 반올림해야합니까? 일반적으로 어떤 값이 4.5에 가까울지를 기준으로하지만,이 경우에는 모두가 이웃에 가깝습니다. 임의로 최종 결과를 선택하는 대신 짝수를 선택합니다. 이는 ROUND_HALF_EVEN의 동작입니다. 원하는 경우 ROUND_HALF_UP을 지정할 수 있으며 최종 결과는 4가 아닌 최종 결과 5가됩니다. 또한 둥근 방법에 대한 결정은 최종 결과가 무엇인지에 따라 결정됩니다 (소수 부분이 아님). 큰 십진수의, 당신이 생각했던 것처럼). this를 참조

0

는 말한다 :

Rounding mode to round towards the "nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor. Behaves as for RoundingMode.HALF_UP if the digit to the left of the discarded fraction is odd; behaves as for RoundingMode.HALF_DOWN if it's even. Note that this is the rounding mode that statistically minimizes cumulative error when applied repeatedly over a sequence of calculations. It is sometimes known as "Banker's rounding," and is chiefly used in the USA. This rounding mode is analogous to the rounding policy used for float and double arithmetic in Java. 

Example: 

Input -> rounded 
5.5 -> 6 
2.5 -> 2 
1.6 -> 2 
1.1 -> 1 
1.0 -> 1 
-1.0 -> -1 
-1.1 -> -1 
-1.6 -> -2 
-2.5 -> -2 
-5.5 -> -6 

은 그래서 가장 가까운 값으로 반올림 모두 등거리 경우 다음 짝수쪽으로 반올림합니다.

5

임의의 음수와 양수가있는 경우 HALF_UP이 좋으며 순 오류는 0이됩니다. HALF_UP은 사람이 이해하기 쉽고 재무에서 자주 사용됩니다.

그러나 긍정적 인 (또는 음수) 숫자가 많다는 것을 알고 있다면 편견을 갖게됩니다. HALF_EVEN 및 HALF_ODD는 짝수 또는 홀수로 갈 확률이 높은지 여부에 따라 0.5를 반올림할지 또는 반올림 할지를 선택하여이를 수정하려고 시도합니다. 이것은 통계적으로 더 공정합니다. 짝수와 홀수의 50/50으로 나누면 인간이 이해하기가 더 어렵습니다.