我正在开发一个实时应用程序,该应用程序使用 BigDecimal 处理不同货币和汇率的货币,但是我面临一些严重的性能问题,我想更改底层表示。
我一遍又一遍地读到,在 Java 中表示货币的一种快速且快速的方法是使用 long 存储美分(或任何所需的精度)。正如其中一条评论指出的那样,有一些带有包装器的库可以做到这一点,例如来自 JavaMoney 的FastMoney。
这里有两个问题。
将钱长期存放(或包装内)并将其他所有内容(例如汇率)加倍存放是否总是安全的?换句话说,如果我这样做
Math.round(money * rate)
(钱是美分,汇率是双倍),我会不会遇到与所有东西都翻倍的基本相同的问题?FastMoney 和许多其他库仅支持它们与原始类型之间的操作。
profit.divide(investment)
如果我做不到(两者都是 FastMoney),我应该如何准确表示投资回报。我想我的想法是我将两者都转换为双打然后将它们分开,但这不准确吗?