2009-03-13 27 views
15

Tengo un resultado de cálculo de BigDecimal que debo redondear al intervalo especificado más cercano (en este caso es el tamaño de tick del mercado financiero).Redondeo de Java BigDecimal al intervalo más cercano

p. Ej. Precio [Tick Size] -> Precio redondeado

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

Thanks.

Actualización: La solución de schnaader, traducido en términos de Java/BigDecimal:

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

Para la capacidad de búsqueda, esta técnica se pueden usar para redondear un valor de porcentaje en cierta fracción arbitraria de un punto base. –

Respuesta

13

Se podría normalizar el tamaño de la garrapata y luego utilizar los métodos de redondeo habituales:

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 

lo que debe ser:

Price = Round(Price/Tick) * Tick; 

También tenga en cuenta que parece que tiene que establecer el modo de redondeo correcto para BigDecima ls. Ver BigDecimal Docs por ejemplo. Por lo tanto, debe asegurarse de configurar esto correctamente y escribir algunas pruebas para verificar la exactitud de su código.

+0

Se ve bien gracias! En términos de Java/BigDecimal, esto se traduce en algo bastante feo: price.divide (tick) .setScale (0, RoundingMode.HALF_UP) .multiply (tick) – Jon

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

// donde p = precio y t = garrapata incremento

Cuestiones relacionadas