我为生活编写货币交易应用程序,所以我必须处理货币值(遗憾的是,Java 仍然没有十进制浮点类型并且没有任何东西支持任意精度的货币计算)。 “使用 BigDecimal!” ——你可能会说。我愿意。但是现在我有一些代码,其中性能 是个问题,BigDecimal 比 double
原语慢 1000 倍以上(!)。
计算很简单:系统所做的就是多次计算a = (1/b) * c
(其中a
, b
和 c
是定点值)。然而,问题在于这个(1/b)
。我不能使用定点算术,因为没有定点。而 BigDecimal result = a.multiply(BigDecimal.ONE.divide(b).multiply(c)
不仅丑陋,而且速度缓慢。
我可以用什么来代替 BigDecimal?我需要至少 10 倍的性能提升。我发现其他方面都很棒JScience library它具有任意精度的算术,但比 BigDecimal 还要慢。
有什么建议吗?
最佳答案
也许您应该从用 a = c/b 替换 a = (1/b) * c 开始?这不是 10 倍,但仍然是。
如果我是你,我会创建自己的 Money 类,它会保留多头美元和多头美分,并在其中进行数学运算。
关于java - 如何处理 Java BigDecimal 性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/611732/