我正在开发一个具有性能问题的实时应用程序,因为BigDecimal是用于存储金额的东西。出于这个原因,现在我们将钱存储为美分,或者实际上是我们正在使用的任何货币的最小金额。
我们处理不同的货币,我们需要快速回答的问题是“我们用这些A单位得到多少B?”。值得一提的是,我们无法将这一数额提高,即我们需要实际可能转换的数量,而不是更多。
使用double
存储汇率很棘手。有时费率会比实际十进制数略高(或低于),因此结果可能会偶尔减去1个单位。
double rateJPYUSD = 10.0; // 10.0 JPY/USD
long multiplierUSD = 100; // USD cents
long multiplierJPY = 1; // JPY units
long amountUSD = 1230; // 12.30 USD
long amountJPY = (long) (amountUSD * rateJPYUSD / multiplierUSD * multiplierJPY);
此处amountJPY
可以是123或122,具体取决于双数(10.0)是略高于(10.0000000001)还是低于(9.9999999999)实际十进制数(10)。
所以问题是什么是最快的方法来实现它?