Инвертирована ли денежная единица JScience?

Я только что столкнулся с этим странным поведением JScience (4.3.1) при конвертации евро в доллары с фиктивным курсом конвертации. 1.05 (имеется ввиду 1.05 USD, если я заплачу 1 EUR):

Currency unitMoney1 = Currency.EUR;
Currency unitMoney2 = Currency.USD;
Currency.setReferenceCurrency(unitMoney1);
unitMoney2.setExchangeRate(1.05);
result = unitMoney1.getConverterTo(unitMoney2).convert(1.0);
System.out.println(result);
    //prints 0.9523809523809523 (unexpected, should be 1.05)
result = unitMoney2.getConverterTo(unitMoney1).convert(result);
System.out.println(result);
    //prints 1.0 (expected)

Преобразование из одной единицы длины в другую работает иначе:

Unit<Length> unitLength1 = (Unit<Length>) Unit.valueOf("m");
Unit<Length> unitLength2 = (Unit<Length>) Unit.valueOf("mm");
double result = unitLength1.getConverterTo(unitLength2).convert(1.0);
System.out.println(result);
// prints 1000.0

Может быть, у меня просто узел в мозгу, но даже в этом минимальном воспроизведении я, кажется, не понимаю этого.

1 ответ

setExchangeRate() Метод "Устанавливает курс этого Currency относительно базовой валюты."В вашем примере ссылочная валюта должна быть Currency.USD не Currency.EUR,

Currency.setReferenceCurrency(Currency.USD);
Currency.EUR.setExchangeRate(1.05); // 1.0 € = 1.05 $
System.out.println(Currency.EUR.getConverterTo(Currency.USD).convert(1.0));

Это печатает 1.05, как и ожидалось. Смотрите также setReferenceCurrency(),

Другие вопросы по тегам