2013-12-09 81 views
16

我试图添加比特币作为显示在我的网站上的货币。我有汇率和一切,但每当我使用java.util.Currency.getInstance("BTC")时,我都会收到IllegalArgumentException。这是有道理的,因为它不包含在ISO 4217货币代码列表中,也没有包含在Java 7中。我见过一些选项,但没有什么能真正解决我的问题。实现比特币和java.util.Currency

  1. 根据Java platform docs,你可以通过创建一个文件$JAVA_HOME/lib/currency.properties覆盖特定地区的货币。这是一个问题,因为比特币不是绑定到特定区域,也不应该用来代替任何国家的货币。

  2. 另一个类似的情况在this StackOverflow的帖子,其中有中国第二货币代码中使用呈现,因此该解决方案是建立自己的currency.data文件添加了第二个货币对中国的语言环境。这样比较好,但仍然存在将货币绑定到区域的问题。

有没有人遇到这个问题或找到解决方法?我知道比特币是比较新的,但能够以比特币格式显示价格会很酷。

+7

你*必须*使用java.util.Currency中?你可以使用String或者写你自己的类。 – aditsu

+0

总而言之,是的。这个应用程序是巨大的,这不应该是一个重大的变化,所以建立一个新班级在这一点上是不值得的。现在,如果我们真的开始接受比特币付款或其他事情,那么也许这是必要的。谢谢! – tedski

+0

嗯,用反射来破解它是一种方法:) – aditsu

回答

9

您不能使用BTC作为ISO 4217下的比特币的货币代码。不丹为BT is reserved。但是,ISO 3166-1 reserves several country codes用于用户定义。另外,用于ISO 4217 lists 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 for the minor unit因为java.util.Currency解析只处理的0-3一个小单元:

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

有趣的是,我会研究这一点。我们现在可能暂时搁置它,但是非常感谢! – tedski

+0

好吧,我试过你的方法,但我似乎无法从'currency.properties'中取出它。我甚至试图用不丹的货币来替代它,看看它是否会奏效。有一些缓存需要清除吗? – tedski

+0

@tedski不是我所知道的。你把文件放在正确的位置吗?尝试做'System.println(System.getProperty(“java.home”))'来查看'$ JAVA_HOME'的位置。 (您的计算机上可能安装了多个JVM,或者如果您使用的是JDK,则可能使用'jre'文件夹作为其主目录。) – Jeffrey