2010-10-08 225 views
12

好日子, 在數據庫中有房子的銷售記錄表。對於每個房屋記錄,都有貨幣代碼(ISO 4217格式)字段。是否可能以某種方式從該代碼中獲取貨幣符號,以便我可以在演示文稿一側使用它?貨幣符號映射到貨幣符號

謝謝。

P.S.試圖解決設置貨幣對象(由Currency.getInstance(currencyCode)創建)到DecimalNumberFormat setCurrency方法的問題,然後格式值我需要顯示,但格式化的值仍然沒有貨幣符號。

回答

7

您可以使用Currency對象的getSymbol方法。

用什麼符號取決於語言環境所使用 見 thisthis.

更新,2016年1月: 的鏈接現在都死了。但是它們特定於Java 1.4/5,因此不再相關。有關貨幣格式的更多詳細信息,請參見https://docs.oracle.com/javase/tutorial/i18n/format/numberFormat.html。雖然可以在WayBackEngine上找到這些鏈接。

+0

我試着爲USD使用getSymbol,然後返回美元符號(正確),但如果我使用EUR或DKK作爲貨幣代碼,那麼結果是EUR或DKK http:// ideone。com/ehmlP – artjomka 2010-10-08 09:27:33

+0

使用什麼符號取決於所使用的語言環境。請參閱我的(更新)答案 – Nivas 2010-10-08 10:09:50

+0

中的文章據我瞭解,如果我想顯示適當的貨幣符號,我需要保持區域設置格式的值我需要我正確(例如要正確顯示英鎊貨幣符號,我需要有英鎊貨幣映射例如在Locale.UK)? – artjomka 2010-10-08 10:29:57

2

您可以使用Currency類和DecimalFormat類來實現您的要求。 在下面的例子中,#表示數字,¤表示貨幣符號,您可以在類似DecimalFormat的java API文檔中找到相關的格式參數。

 Currency currency = Currency.getInstance("USD"); 

     DecimalFormat decimalFormat = new DecimalFormat("#¤"); 
     decimalFormat.setCurrency(currency); 
     System.out.println(decimalFormat.format(234)); 
+0

正如Nivas所說,您可以使用Currency類的getSymbol()方法直接獲取相關符號,也可以將其單獨附加到數字中。 – 2010-10-08 09:20:09

11

@artjomka

我可以通過我的默認區域設置拉脫維亞

Locale.setDefault(new Locale("lv","LV")); 
Currency c = Currency.getInstance("EUR"); 
System.out.println(c.getSymbol()); 

複製您的問題這給了我「歐元」的輸出。

但是,通過離開將我的區域設置爲英國(已經是我的默認值),我得到了歐元的sympbol。

Locale.setDefault(Locale.UK); 
Currency c = Currency.getInstance("EUR"); 
System.out.println(c.getSymbol()); 
+2

Nivas編輯他的答案,而我寫我的。他的鏈接文章應該看到你的權利。 – 2010-10-08 10:16:17

1

你應該叫Currency.getSymbol(Locale)而非Currency.getSymbol()(沒有Locale對象)。設置默認語言環境會爲您提供所需的行爲。

0

永遠不要盲目追加貨幣符號(假定append是貨幣符號的區域適當位置)。 I18n-不安全的做法。同樣以「#¤」字符串(前綴貨幣符號的語言環境,這是不正確的)

0

有一個代碼片段在https://stackoverflow.com/a/15343675/702345

但要小心:

  • 一種貨幣可以有多個符號。如:美元也有符號 「US $」 本地 「es_US」(至少在Java8,Win7的在我的VM)
  • 差異貨幣可以有相同的符號,如:USD,AUD