3

我有一项服务向我发送我应该使用的货币的货币 ID。ID 是一个代表 ISO-4217 货币的数字。

java Currency 对象能够根据货币字符串ID(即USD、JPY...)获取实例,而不是根据ISO 编号代码(即840、392...)

如何使用数字值获取实例?

4

4 回答 4

3

Maven 工件com.neovisionaries:nv-i18n:1.9包含CurrencyCode,这是一个列出所有 ISO 4217 代码的 Java 枚举。使用 CurrencyCode,从 ISO 4217 数字代码中获取 Currency 实例可以编写如下。

import java.util.Currency;
import com.neovisionaries.i18n.CurrencyCode;

public class Test
{
    public static void main(String[] args)
    {
        // Get the Currency instance for 392 (Japanese Yen).
        Currency currency
            = CurrencyCode.getByCode(392).getCurrency();

        // This prints "JPY".
        System.out.println("currency = " + currency);
    }
}

nv-i18n 项目页面:
https ://github.com/TakahikoKawasaki/nv-i18n

马文:

<dependency>
    <groupId>com.neovisionaries</groupId>
    <artifactId>nv-i18n</artifactId>
    <version>1.9</version>
</dependency>
于 2014-02-03T20:23:54.313 回答
1

由于 Java 7(可能不适用于 Android,除非 Android 支持 Java 7),数字代码包含在货币数据中,但不幸的是(出于某种奇怪的原因)Currency 类中没有静态查找方法。

您可以自己实现这样的方法,可能会为性能优化创建一个查找图,而不是在每次调用中遍历所有货币:

public static Currency getByCode(int code) {
    for(Currency c : Currency.getAvailableCurrencies()) {
        if(c.getNumericCode() == code) {
            return c;
        }
    }
    throw new IllegalArgumentException("Unkown currency code: " + code);
}
于 2012-07-16T15:17:31.560 回答
0

ISO 4217 货币可以在以下位置以 xml 格式找到:

http://www.currency-iso.org/dam/downloads/table_a1.xml

您可以将文件保存在您的应用程序中,并使用一些 xpath 来提取相关的货币代码,然后您可以在Currency.getInstance(String currencyCode).

于 2013-08-28T11:36:10.553 回答
0

您必须创建一个映射,将数字映射到 ISO 字符串。

class MyISO4217Mapper {
    private static final Map<Integer, String> mapOfISO4217 = new HashMap<>();


    static {
        // create static mappings here:

        mapOfISO4217.put(710, "ZAR");
        // .
        // .
        // .
        mapOfISO4217.put(840, "USD");
    }

    public static Currency getISOCode(Integer id) {
        String isoCode = mapOfISO4217.get(id);
        return Currency.getInstance(isoCode);
    }
}   
于 2012-07-16T14:48:58.993 回答