我有一個打印計算貨幣值的應用程序,我想用默認貨幣格式顯示該值。如何使用設備貨幣格式格式化浮點值?
例如,在歐洲你可以這樣寫:
1.000,95€
在美國,我想你會寫
1,000.95 $
其他貨幣也有或多或少的值顯示爲小數部分,在美國它將是2但在日本它將是0.
如何獲得儘可能準確的fo所有現有貨幣的rmat?
我有一個打印計算貨幣值的應用程序,我想用默認貨幣格式顯示該值。如何使用設備貨幣格式格式化浮點值?
例如,在歐洲你可以這樣寫:
1.000,95€
在美國,我想你會寫
1,000.95 $
其他貨幣也有或多或少的值顯示爲小數部分,在美國它將是2但在日本它將是0.
如何獲得儘可能準確的fo所有現有貨幣的rmat?
我找到了解決方案。 NumberFormat類有許多預定義的格式化程序。還有一個用於格式化貨幣值。
如果使用靜態方法getCurrencyInstance,該類將返回設備默認貨幣的格式化程序。我用下面的代碼來設置我的結果:
NumberFormat format = NumberFormat.getCurrencyInstance();
((TextView) findViewById(R.id.text_result)).setText(format.format(result));
它有各種各樣的設計,使其能夠解析和在任何區域 格式的數字,其中包括西,阿拉伯語, 或印度語數字的支持功能。它還支持包括整數(「123」),定點數(123.4),科學 表示法(「1.23E4」),百分比(「12%」),和貨幣金額 的不同風格的數字 ( 「$ 123」)。所有這些口味都可以輕鬆本地化。
爲了完整起見假設你想顯示手機當前的區域設置(十進制正確標記和千個分隔符)的代價,但與您所選擇的貨幣。
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中。
此鏈接對語言環境很有幫助http://stackoverflow.com/questions/4212320/get-the-current-language-in-device?rq=1 –
如果有人在獲取正確的貨幣符號時遇到問題,這裏有一個替代的https: //stackoverflow.com/questions/9777689/how-to-get-numberformat-instance-from-currency-code –
獲得設備的語言環境,你可以這樣做:
@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)
結果變量是哪種格式? –
結果= 1000時會發生什麼情況,您的手機區域設置是FR,但是您在美國?它會寫1000歐元而不是1000美元?貨幣格式不會考慮轉換或結果正確嗎? –