Domanda

Ho un risultato di calcolo BigDecimal che devo arrotondare all'intervallo specificato più vicino (in questo caso è la dimensione del tick del mercato finanziario).

es. Prezzo [Tick Size] - > Prezzo arrotondato

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

Grazie.

Aggiornamento: soluzione di Schnaader, tradotta in termini Java / BigDecimal:

price = price.divide(tick).setScale(0, RoundingMode.HALF_UP).multiply(tick)
È stato utile?

Soluzione

È possibile normalizzare la dimensione del segno di spunta e quindi utilizzare i soliti metodi di arrotondamento:

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

Quindi dovrebbe essere:

Price = Round(Price / Tick) * Tick;

Inoltre, sembra che tu debba impostare la modalità di arrotondamento corretta per BigDecimals. Vedi BigDecimal Docs per esempio . Quindi dovresti essere sicuro di impostare questo corretto e scrivere alcuni test per verificare la correttezza del tuo codice.

Altri suggerimenti

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

// dove p = price et t = tick increment

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top