#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 €