2011-08-20 199 views
35

我有一個打印計算貨幣值的應用程序,我想用默認貨幣格式顯示該值。如何使用設備貨幣格式格式化浮點值?

例如,在歐洲你可以這樣寫:

1.000,95€

在美國,我想你會寫

1,000.95 $

其他貨幣也有或多或少的值顯示爲小數部分,在美國它將是2但在日本它將是0.

如何獲得儘可能準確的fo所有現有貨幣的rmat?

回答

65

我找到了解決方案。 NumberFormat類有許多預定義的格式化程序。還有一個用於格式化貨幣值。

如果使用靜態方法getCurrencyInstance,該類將返回設備默認貨幣的格式化程序。我用下面的代碼來設置我的結果:

NumberFormat format = NumberFormat.getCurrencyInstance(); 
((TextView) findViewById(R.id.text_result)).setText(format.format(result)); 
+1

結果變量是哪種格式? –

+1

結果= 1000時會發生什麼情況,您的手機區域設置是FR,但是您在美國?它會寫1000歐元而不是1000美元?貨幣格式不會考慮轉換或結果正確嗎? –

2

結帳DecimalFormat

它有各種各樣的設計,使其能夠解析和在任何區域 格式的數字,其中包括西,阿拉伯語, 或印度語數字的支持功能。它還支持包括整數(「123」),定點數(123.4),科學 表示法(「1.23E4」),百分比(「12%」),和貨幣金額 的不同風格的數字 ( 「$ 123」)。所有這些口味都可以輕鬆本地化。

39

爲了完整起見假設你想顯示手機當前的區域設置(十進制正確標記和千個分隔符)的代價,但與您所選擇的貨幣。

NumberFormat format = NumberFormat.getCurrencyInstance(Locale.getDefault()); 
format.setCurrency(Currency.getInstance("CZK")); 
String result = format.format(1234567.89); 

result然後將持有這些值:

  • CZK1,234,567.89與美國地區
  • 1 234 567,89 Kč與捷克的語言環境

如果您想省略對價格的小數部分(顯示$199而不是$199.00)在使用格式化程序之前調用它:

format.setMinimumFractionDigits(0); 

所有選項都列在NumberFormat docs中。

+0

此鏈接對語言環境很有幫助http://stackoverflow.com/questions/4212320/get-the-current-language-in-device?rq=1 –

+0

如果有人在獲取正確的貨幣符號時遇到問題,這裏有一個替代的https: //stackoverflow.com/questions/9777689/how-to-get-numberformat-instance-from-currency-code –

0

獲得設備的語言環境,你可以這樣做:

@TargetApi(Build.VERSION_CODES.N) 
    public static Locale getCurrentLocale(Context c) { 
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { 
      return c.getResources().getConfiguration().getLocales().get(0); 
     } else { 
      //noinspection deprecation 
      return c.getResources().getConfiguration().locale; 
     } 

,然後做格式:

 double num = 1323.526; 

     NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(getCurrentLocale(getContext())); 
     defaultFormat.format(num)