2011-08-20 7 views
35

計算された金額を印刷するアプリがあり、その値をデフォルトの通貨形式で表示したいと考えています。デバイスの通貨形式で浮動小数点値をフォーマットする方法はありますか?

ヨーロッパではたとえば次のように記述します。

1.000,95€米国で

私はあなたがそこにある他の通貨で

1,000.95 $

を書くと思い多かれ少なかれ小数点で表示される値は米国では2ですが、日本では0になります。

どのようにして正確なfoすべての既存通貨の為替レート?

答えて

65

解決策が見つかりました。クラスNumberFormatには多数の定義済みフォーマッタがあります。通貨の値を書式設定するためのものもあります。

静的メソッドgetCurrencyInstanceを使用すると、クラスはデバイスのデフォルト通貨のフォーマッタを返します。私は自分の結果を設定するには、次のコードを使用します。

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

結果変数は、どのフォーマットである?? –

+1

result = 1000の場合はどうなり、携帯電話のロケールはFRですが、あなたは米国にいますか?それは1000ドルではなく1 000ユーロを書きますか?通貨形式は、変換または結果の正確性を考慮しませんか? –

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 USロケール
  • 1 234 567,89 Kčでチェコ語ロケール

であなたが価格小数部分を省略したい場合( $199.00の代わりに$199を表示)は、フォーマッタを使用する前にこれを呼び出してください:

format.setMinimumFractionDigits(0); 

すべてのオプションはNumberFormat docsにリストされています。

@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; 
     } 

して、フォーマットを行うには:あなたがこれを使用することができ、デバイスのロケールを取得する

+0

このリンクはLocaleに役立ちます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

 double num = 1323.526; 

     NumberFormat defaultFormat = NumberFormat.getCurrencyInstance(getCurrentLocale(getContext())); 
     defaultFormat.format(num) 
関連する問題