java - Android 多货币格式化

标签 java android enums

我的枚举中有几种货币,如下所示:

public enum Currencies{USD, LVL, EUR;}

然后有一个条目列表(属于 Item 类),每个条目都有一个上述货币之一的数字(long 类型)。现在我想尽可能高效地格式化这个数字。

到目前为止我所做的是创建一个函数

public String getFormatedSum(){
    NumberFormat mCurrencyFormatter = NumberFormat.getCurrencyInstance();
    mCurrencyFormatter.setCurrency(Currency.getInstance(getCurrency().toString()));
    return mCurrencyFormatter.format(getSum()); 
}

其中 getCurrency() 将货币作为特定项目的字符串返回。

现在我知道这是可行的,但我也怀疑应该有更好的方法来做到这一点。我曾想过在 map 中实例化格式化程序,然后检索我需要的格式化程序并进行格式化,但 NumberFormat 类似乎是静态的。

有什么建议吗?或者我这样做对吗?

最佳答案

首先,您的 getCurrency 方法也许可以(通过查找或直接返回一个 Currency (也许它已经这样做了)。

NumberFormat 不是静态的,但有一个用于创建实例的静态工厂方法。您可以将实例保存在Map中:

Map<Currency, NumberFormat> formatters = new HashMap<>();
...

NumberFormat getCurrencyFormatter(Currency currency) {
    NumberFormat result = formatters.get(currency);
    if (result == null) {
        result = NumberFormat.getCurrencyInstance();
        result.setCurrency(currency);
        formatters.put(currency, result);
    }
    return result;
}

关于java - Android 多货币格式化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10978785/

相关文章:

java - 从 Activity 返回时如何部分填充进度条?

android - 如何在 Android 中以编程方式设置样式属性?

java - 我的插入方法有什么问题?

c++ - 有没有一种简单的方法可以将 C++ 枚举转换为字符串?

java - 在 JSplitPane 上设置分隔线位置

java - 一起旋转 ImageView 和 TextView

android - 将新项目添加到 ListView 的开头,并保持滚动位置

c++ - 枚举作为模板

java - Java 1.4 中枚举的替代品

java - 仅具有 gettable 的 JSF