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);
    }
Другие вопросы по тегам