【发布时间】:2018-05-28 07:16:27
【问题描述】:
我正在开发一个实时应用程序,该应用程序使用 BigDecimal 处理不同货币和汇率的货币,但是我面临一些严重的性能问题,我想更改基础表示。
我一遍又一遍地读到,在 Java 中表示货币的一种快速的好方法是使用 long 存储美分(或任何所需的精度)。正如其中一位 cmets 指出的那样,有一些带有包装器的库可以做到这一点,例如来自 JavaMoney 的 FastMoney。
这里有两个问题。
将钱长期存放(或在包装内)并将其他所有内容(如汇率)保持为双倍是否总是安全?换句话说,如果我这样做
Math.round(money * rate)(钱是美分,汇率是双倍),我会不会遇到基本相同的问题?FastMoney 和许多其他库仅支持它们与原始类型之间的操作。如果我不能做到
profit.divide(investment)(两者都是FastMoney),我应该如何准确表示投资回报。我想我的想法是我将两者都转换为双精度然后将它们分开,但这不准确吗?
【问题讨论】:
-
为什么要将货币金额相乘?您是否经常计算“50 美元乘以 2.75 美元”?将金额存储为美分只需要您为显示进行格式化,您不需要任何库。
-
@Kayaman 你的意思是你不使用平方美元?
-
@AndyTurner 仅在我购买方形鸡蛋时。
-
我自己更喜欢Triganic Pu。但你需要大口袋。
-
0.85不是货币金额,而是汇率。为什么要长期保存?
标签: java currency long-integer java-money jsr354