Как я могу получить объект Currency, используя номер

1

Я получил услугу, которая отправила мне валютный идентификатор валюты, с которой я должен работать. Идентификатор - это номер, который представляет собой валюту ISO-4217.

Объект java Currency позволяет получить экземпляр в соответствии с идентификатором строки валюты (например, USD, JPY...), но не в соответствии с кодом номера ISO (т.е. 840, 392...)

Как я могу получить экземпляр, используя значение числа?

  • 1
    Вы хотите отработать валюту, изучив число? Итак, какая валюта тогда 42,00?
  • 0
    Он ссылается на трехзначные цифровые коды ISO 3166-1: en.wikipedia.org/wiki/ISO_3166-1_numeric
Показать ещё 4 комментария
Теги:
currency

4 ответа

2

Maven artifact com.neovisionaries: nv-i18n: 1.9 содержит CurrencyCode, который представляет собой перечисление Java, перечисляющее все коды ISO 4217. С CurrencyCode получение экземпляра валюты из цифрового кода ISO 4217 может быть записано следующим образом.

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

Maven:

<dependency>
    <groupId>com.neovisionaries</groupId>
    <artifactId>nv-i18n</artifactId>
    <version>1.9</version>
</dependency>
  • 0
    Спасибо !! это было очень полезно!
0

Валюта ISO 4217 может быть найдена в следующем месте в формате xml:

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

Вы можете сохранить файл внутри своего приложения и использовать бит xpath для извлечения соответствующего кода валюты, который затем можно использовать в Currency.getInstance(String currencyCode).

0

Поскольку 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);
}
  • 0
    К сожалению, ваш пример не сработает. Android использует подмножество Apache Harmony SE 6. Ни getAvailableCurrencies() ни getNumericCode() не поддерживаются для Currency в Android.
  • 0
    Извините, я пропустил тег Android.
Показать ещё 1 комментарий
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);
    }
}   

Ещё вопросы

Сообщество Overcoder
Наверх
Меню