Java Money - самая маленькая единица валюты
У меня есть нисходящий сервис (Stripe), который требует отправки валюты в наименьшей денежной единице (ноль-десятичная валюта в их документах). Т.е. для начисления $1 я бы отправил { "currency": "USD", сумма: 100 }, а для начисления ¥100 я бы отправил { "currency": "YEN", сумма: 100 }
Мои апстрим-приложения не хотят обрабатывать валюту таким образом и хотят использовать стандартные форматы валют. Есть ли средства трансформации javax.money.MonetaryAmount
в нулевой десятичный формат валюты?
Или я собираюсь написать преобразования вручную?
1 ответ
Я видел, как некоторые люди используют BigDecimal. Вот это как функция. Пожалуйста, напишите несколько тестов для него :) :
public static BigDecimal currencyNoDecimalToDecimal(int amount, String currencyCode) {
Currency currency = Currency.getInstance(currencyCode); // ISO 4217 codes
BigDecimal bigD = BigDecimal.valueOf(amount);
System.out.println("bigD = " + bigD); // bigD = 100
BigDecimal smallD = bigD.movePointLeft(currency.getDefaultFractionDigits());
System.out.println("smallD = " + smallD); // smallD = 1.00
return smallD;
}
public static void main(String[] args) {
int amount = 100;
String currencyCode = "USD";
BigDecimal dollars = currencyNoDecimalToDecimal(amount, currencyCode);
System.out.println("dollars = "+dollars);
}