2009-03-13 14 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 

ありがとうございます。

更新:schnaaderのソリューション、Javaの/のBigDecimal用語に翻訳:

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

ダニ、この技術は、ベーシス・ポイントのある任意の画分にパーセント値を丸めるために使用することができます。 –

答えて

13

あなたはダニの大きさを正規化して、通常の丸め方法を使用することができます。

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に正しい丸めモードを設定する必要があるようですls。例えば、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 =検索性の増分

関連する問題