当前位置:  开发笔记 > 编程语言 > 正文

将Java BigDecimal舍入到最近的间隔

如何解决《将JavaBigDecimal舍入到最近的间隔》经验,为你挑选了1个好方法。

我有一个BigDecimal计算结果,我需要舍入到最近的指定区间(在这种情况下,它是金融市场的标记大小).

例如价格[Tick Size] - > Rounded Price

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)

schnaader.. 13

您可以标准化刻度尺寸,然后使用通常的舍入方法:

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 Docs.因此,您应确保将此设置正确并编写一些测试以检查代码的正确性.



1> schnaader..:

您可以标准化刻度尺寸,然后使用通常的舍入方法:

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 Docs.因此,您应确保将此设置正确并编写一些测试以检查代码的正确性.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有