Реализация биткойнов и java.util.Currency

Я пытаюсь добавить биткойн в качестве валюты для отображения на моем сайте. У меня есть обменные курсы и все, но я продолжаю получать IllegalArgumentException всякий раз, когда я использую java.util.Currency.getInstance("BTC"). Это имеет смысл, поскольку он не включен в список кодов ISO 4217, а также не в Java 7. Я видел пару варианты, но ничего, что действительно решает мою проблему.

  • В соответствии с Java документами платформы вы можете переопределить определенную валюту локали, создав файл $JAVA_HOME/lib/currency.properties. Это проблема, поскольку биткойн не привязан к конкретной локали, и он не должен использоваться вместо какой-либо валюты страны.

  • Другая аналогичная ситуация была представлена ​​в этом столбце StackOverflow, где в Китае использовался второй код валюты, поэтому решение заключалось в создании собственного currency.data, который добавил вторую валюту для локали Китая. Это лучше, но по-прежнему существует проблема привязки валюты к языку.

Кто-нибудь сталкивался с этой проблемой или нашел обходное решение? Я знаю, что биткойн относительно новый, но было бы здорово отображать цены в биткойнном формате.

Ответы

Ответ 1

Вы не можете использовать BTC в качестве кода валюты для биткойнов в ISO 4217. BT зарезервирован для Бутана. Однако ISO 3166-1 резервирует несколько кодов стран для определения пользователя. Кроме того, wiki для ISO 4217 перечисляет XBT в качестве кода валюты для биткойнов (неофициально, конечно).

Locale.Builder b = new Locale.Builder();
b.setRegion("XB");
Locale xb = b.build();
Currency bitcoin = Currency.getInstance(xb);

Ваш файл currency.properties будет выглядеть так:

XB=XBT,000,3

К сожалению, у вас не может быть 8 для второстепенного устройства, потому что синтаксический анализ для java.util.Currency обрабатывает только младшая единица 0-3:

Pattern propertiesPattern = Pattern.compile("([A-Z]{3})\\s*,\\s*(\\d{3})\\s*,\\s*([0-3])");