2017-01-17 8 views
1

Я просто наткнулся на это странное поведение JScience (4.3.1) при преобразовании EUR в USD по курсу 1.05 фиктивного преобразования (то есть я получаю 1.05 USD, если я платить 1 евро):Преобразование денежных единиц JScience перевернуто?

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().

Смежные вопросы