Обработка нескольких валют в приложении Java

#java

#java

Вопрос:

Я хочу иметь возможность обрабатывать несколько валют в своем приложении. У меня есть метод, который создаст экземпляр транзакции:

 class MyApp() {
    //...
    public Transaction createTransaction(String desc, BigDecimal amount) {...
  

Так называется что-то вроде этого:

 createTransaction("Phone bill", new BigDecimal("28.555"));
  

Однако я хочу, чтобы сумма была отформатирована в зависимости от того, на какую валюту / язык установлен. Я думал иметь что-то вроде:

 interface MyCurrency() {
    public static BigDecimal format(BigDecimal amount);
}

public class GBP implements MyCurrency {
    public static BigDecimal format(BigDecimal amount) {
        return amount.setScale(2, BigDecimal.ROUND_FLOOR); // 28.555 -> 28.55
    }
}

public class JPY implements MyCurrency {
    public static BigDecimal format(BigDecimal amount) {
        return amount.setScale(0, BigDecimal.ROUND_FLOOR); // 28.555 -> 28
    }
}

// then modify my app class as follows

class MyApp() {
    //...
    public void setCurrency(MyCurrency currency) {
        this.currency = currency;
    }
    public Transaction createTransaction(String desc, BigDecimal amount) {
        amount = this.currency.format(amount);
        //...
    }
  

Я надеюсь, что это имеет смысл. Но есть ли сборка Java для этого? Я искал для обработки нескольких валют, но не нашел ничего, что обсуждало бы это (я уверен, что это довольно распространенный сценарий)

Комментарии:

1. Имейте это в виду: на самом деле не существует такого понятия, как число без единицы. Если вы создаете транзакцию, вам необходимо указать, в какой валюте (единице измерения) выполняется транзакция. Вам нужно хранить эту информацию везде и т. Д.

Ответ №1:

Вы пробовали следующее? Он форматирует валюту в соответствии со спецификациями номера страны, в которой вы ее отображаете.

 java.util.Currency usd = java.util.Currency.getInstance("USD");
java.text.NumberFormat format = java.text.NumberFormat.getCurrencyInstance(java.util.Locale.GERMANY);
format.setCurrency(usd);
format.setMaximumFractionDigits(usd.getDefaultFractionDigits());
System.out.println(format.format(23));
  

Если вы не имеете в виду, что в Германии это должны быть евро, в Великобритании это должны быть фунты. в этом случае вам следует уточнить свой вопрос.

Но если это так:

 DecimalFormat.getCurrencyInstance().format( 123.45);//    $123.45
DecimalFormat.getCurrencyInstance(Locale.GERMANY).format( 123.45); // 123,45 €