2016-10-12 8 views
1

アプリで複数の通貨を処理できるようにします。私は量が通貨/ロケールに設定されているものに応じてフォーマットする必要がJavaアプリで複数の通貨を処理する

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

:だから、このようなものと呼ばれる

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

:私は、トランザクションインスタンスを作成するメソッドを持っています。

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のビルドがありますか?私は複数の通貨を扱うことを探しましたが、これについて議論しているものは見つかりませんでした(でもかなり一般的なシナリオだと確信しています)

+0

は、この点に注意してください:ユニットレス番号などの任意のそのようなことは本当にありません。トランザクションを作成する場合は、そのトランザクションの通貨(単位)を指定する必要があります。その情報はどこにでも保存する必要があります。 –

答えて

2

あなたは次のことを試しましたか?それはあなたがそれを表示している国の数の仕様に応じて通貨をフォーマットします。

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 € 
関連する問題