java - 如何处理 Java BigDecimal 性能?

标签 java optimization currency math bigdecimal

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

计算很简单:系统所做的就是多次计算a = (1/b) * c(其中a, bc 是定点值)。然而,问题在于这个(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/

相关文章:

java - 如何使用在我的 Windows 机器上运行的 Java 代码写入 Linux 中的文件?

ios - 哪一个在性能方面是有效的 - AppDelegate 的对象或 AppDelegate 的宏?

python - 展平不规则(任意嵌套)的列表列表

Mysql存储优化

r - 有条件地乘以向量(货币换算)

java - 如何在对话框中自动换行

java - 在 itext 7 中将 html 转换为 pdf 时如何仅获得某些页面的横向方向?

java - 我如何组织和减少申请中的类(class)数量

Excel VBA 显示带有 Afterupdate 和 Change 事件的货币

c - 在c中识别并打印货币符号