Производительность Java в представлении денег и конвертации валюты? - PullRequest
0 голосов
/ 30 мая 2018

Я работаю над приложением реального времени, которое имеет проблемы с производительностью, так как BigDecimal используется для хранения денежных сумм.По этой причине теперь у нас есть деньги, хранящиеся в виде центов, или фактически наименьшая сумма в любой валюте, с которой мы работаем.

Мы работаем с разными валютами, и вопрос, на который нам нужно ответить очень быстро, это «сколько изB мы получаем с этими единицами A? ».Стоит отметить, что мы не можем округлить эту сумму, т. Е. Нам нужно то, что было бы фактически возможно конвертировать, не более.

Использование 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).

Итак, вопрос в том, какой самый быстрый способ сделать это правильно?

...