我为了生活而编写货币交易应用程序,所以我必须使用货币值(遗憾的是 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 许可协议
也许你应该开始用 a = (1/b) * c 替换 a = c/b ?这不是 10 倍,但仍然是一些东西。
如果我是你,我会创建自己的 Money 类,它会保存多头美元和多头美分,并在其中进行数学计算。