如何处理 Java BigDecimal 性能?

新手上路,请多包涵

我为了生活而编写货币交易应用程序,所以我必须使用货币值(遗憾的是 Java 仍然没有小数浮点类型并且没有任何东西可以支持任意精度的货币计算)。 “使用 BigDecimal!” ——你可能会说。我愿意。但是现在我有一些代码,其中性能 一个问题,BigDecimal 比 double 原语慢 1000 多倍(!)。

The calculations are very simple: what the system does is calculating a = (1/b) * c many many times (where a , b and c are fixed-点值)。然而,问题在于这个 (1/b) 。我不能使用定点运算,因为没有定点。而且 BigDecimal result = a.multiply(BigDecimal.ONE.divide(b).multiply(c) 不仅丑陋,而且速度缓慢。

我可以用什么来代替 BigDecimal?我需要至少 10 倍的性能提升。我发现其他优秀 的 JScience 库 具有任意精度的算法,但它甚至比 BigDecimal 慢。

有什么建议么?

原文由 Alexander Temerev 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 606
1 个回答

也许你应该开始用 a = (1/b) * c 替换 a = c/b ?这不是 10 倍,但仍然是一些东西。

如果我是你,我会创建自己的 Money 类,它会保存多头美元和多头美分,并在其中进行数学计算。

原文由 Vladimir Dyuzhev 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题