2009-03-13 6 views
15

나는 가장 가까운 지정된 간격 (이 경우에는 금융 시장 진드기 크기)으로 반올림해야하는 BigDecimal 계산 결과가 있습니다.Java BigDecimal을 가장 가까운 간격으로 반올림

예컨대 가격 [눈금 크기] -> 반올림 가격

100.1 [0.25] -> 100 
100.2 [0.25] -> 100.25 
100.1 [0.125] -> 100.125 
100.2 [0.125] -> 100.25 

감사합니다.

업데이트 : 당신은 눈금 크기를 정상화하고 일반적인 반올림 방법을 사용할 수

price = price.divide(tick).setScale(0, RoundingMode.HALF_UP).multiply(tick) 
+1

는,이 기술은 기점의 어떤 임의의 부분에 대한 퍼센트 값으로 반올림하는 데 사용될 수있는. –

답변

13

: 자바/BigDecimal를 지표로 환산 schnaader의 솔루션,

100.1 [0.25] -> * (1/0.25) -> 400.4 [1] -> round -> 400 ->/(1/0.25) -> 100 
100.2 [0.25] -> * (1/0.25) -> 400.8 [1] -> round -> 401 ->/(1/0.25) -> 100.25 

그래서 그것이 있어야 :

Price = Round(Price/Tick) * Tick; 

또한 BigDecima에 올바른 반올림 모드를 설정해야하는 것 같습니다. 그렇소. 예를 들어 BigDecimal Docs을 참조하십시오. 따라서이 코드를 올바르게 설정하고 코드의 정확성을 검사하기위한 몇 가지 테스트를 작성해야합니다.

+0

좋은 감사합니다! Java/BigDecimal의 경우, 이것은보기 흉한 것으로 해석됩니다 : price.divide (tick) .setScale (0, RoundingMode.HALF_UP) .multiply (tick) – Jon

1
p= p - p % t + ((p % t < t/2) ? 0.0 : t); 

// p = 가격 및 t = 틱 증가 이용한 검색 용

관련 문제