2009-03-13 23 views
15

En yakın belirtilen aralığa (bu durumda finans piyasası kene boyutu) dönmem gereken bir BigDecimal hesaplama sonucum var.Bir Java BigDecimal'i en yakın aralığa yuvarlama

örn. Fiyat [Tick Size] -> Yuvarlak Fiyat

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

Teşekkürler.

Güncelleme: Sen kene boyutunu normalleştirmek ve sonra her zamanki yuvarlama yöntemleri kullanabilirsiniz

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

, bu teknik, bir baz noktasının keyfi bir fraksiyonuna bir yüzde değeri yuvarlak kullanılabilir burada. –

cevap

13

: Java/BigDecimal açısından çevrilmiş schnaader çözümü,

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 

Yani olması gerektiği:

Price = Round(Price/Tick) * Tick; 

Ayrıca BigDecima için doğru yuvarlama modunu ayarlamak zorunda olduğunuzu unutmayın. ls. Örneğin, BigDecimal Docs. Bu nedenle, doğru bir şekilde ayarladığınızdan ve kodunuzun doğruluğunu kontrol etmek için bazı testler yazdığınızdan emin olmalısınız.

+0

İyi görünüyor! Java/BigDecimal terimlerinde bu oldukça çirkinleşir: price.divide (tick) .setScale (0, RoundingMode.HALF_UP) .Çok (tick) – Jon

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

// p = fiyat ve t = kene artış aranabilirliğini için