我正在开发一个实时应用程序,处理不同货币和汇率的资金,使用BigDecimal,但我遇到了一些严重的性能问题,我想改变底层表示。
我一遍又一遍地阅读,发现在Java中表示资金的一种好而快速的方法是使用长整型存储分(或所需精度),如评论中指出的那样,有一些包装器库可以做到这一点,例如JavaMoney中的FastMoney。
这里有两个问题。
将钱存储为长整型(或在包装器内部)并将其他所有内容(如汇率)保留为double,这样做是否始终安全?换句话说,如果我执行
Math.round(money * rate)
(money为分,rate为double),我是否会遇到与将所有内容存储为double相同的问题?FastMoney和许多其他库仅支持它们与原始类型之间的操作。如果我无法执行
profit.divide(investment)
(两者均为FastMoney),我该怎么办才能得到投资回报的准确表示呢?我想这意味着我将两者都转换为double,然后再将它们除以,但这会不准确,对吗?