Question

J'ai un résultat de calcul BigDecimal qu'il me faut arrondir à l'intervalle spécifié le plus proche (dans ce cas, il s'agit de la taille du tick du marché financier).

par exemple. Prix ??[Taille de la tique] - > Prix ??arrondi

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

Merci.

Mise à jour: la solution de schnaader, traduite en termes Java / BigDecimal:

price = price.divide(tick).setScale(0, RoundingMode.HALF_UP).multiply(tick)
Était-ce utile?

La solution

Vous pouvez normaliser la taille des ticks, puis utiliser les méthodes d'arrondissement habituelles:

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

Cela devrait donc être:

Price = Round(Price / Tick) * Tick;

Notez également que vous semblez devoir définir le mode d'arrondi correct pour BigDecimals. Voir documents BigDecimal pour un exemple. . Vous devez donc vous assurer de définir ce paramètre correctement et d’écrire des tests pour vérifier l’exactitude de votre code.

Autres conseils

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

// où p = prix et t = incréments de tick

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top