2013-12-09 88 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