我希望能够在我的应用中处理多种货币。我有一个方法将创建一个事务实例:
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构建方式呢?我搜索了处理多种货币,但没有找到任何讨论过这种情况的东西(我确定它是一种非常常见的情况)
答案 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 €