如何处理Java BigDecimal的性能?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (22)

我为生活写作货币交易应用程序,所以我必须使用货币值(可惜Java仍然没有小数点浮动类型并且没有任何支持任意精度货币计算)。“使用BigDecimal!” - 你可能会说。我做。但是现在我有一些代码,性能一个问题,BigDecimal比double基元慢1000倍以上(!)。

计算很简单:系统做什么是计算a = (1/b) * c很多很多次(其中abc有固定的点值)。但问题在于此(1/b)。由于没有固定点,我不能使用定点算术。而且BigDecimal result = a.multiply(BigDecimal.ONE.divide(b).multiply(c)不仅难看,而且缓慢缓慢。

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

有什么建议么?

提问于
用户回答回答于

大多数双重操作给你足够的精度。你可以用分数来表示10万亿美元的分值,这可能对你来说已经足够了。

在我所从事的所有交易系统(四家不同的银行)中,他们用适当的四舍五入来加倍使用。我没有看到有任何理由使用BigDecimal。

用户回答回答于

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

如果我是你,我会创建自己的班级Money,这将保持长期美元和长期美分,并在其中进行数学运算。

扫码关注云+社区