四舍五入一个Java的BigDecimal到最近的间隔
-
22-07-2019 - |
题
我有我需要舍入到最接近指定的时间间隔(在此情况下它是金融市场蜱大小)。
的BigDecimal计算结果e.g。价格[蜱尺寸] - >舍入后价格
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)
解决方案
您可以正常化蜱的尺寸,然后使用通常的舍入方法:
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;
另外请注意,你似乎必须设置为BigDecimals的正确的舍入模式。请参见 BigDecimal的文档例如。所以,你应该确保这个设置正确,写一些测试,以检查你的代码的正确性。
其他提示
p= p - p % t + ((p % t < t / 2) ? 0.0 : t);
//其中p =价格和t =蜱增量
不隶属于 StackOverflow