4

以前の .Net ライフでは、現在の言語の通貨 (任意の通貨) をフォーマットする方法は、次のようにすることでした。

public string FormatCurrencyValue(string symbol, decimal val) 
{
  var format = (NumberFormatInfo)CultureInfo.CurrentUICulture.NumberFormat.Clone();
  //overwrite the currency symbol with the one I want to display
  format.CurrencySymbol = symbol;
  //pass the format to ToString();
  return val.ToString("{0:C2}", format);
}

これは、指定された通貨記号用に書式設定され、現在のカルチャ用に調整された、小数点以下の部分を含まない通貨値を返します (例: £50.00for en-GBbut 50,00£for ) fr-FR

Windows ストアで同じコードを実行すると、{50:C}.

(かなりひどい) WinRT ドキュメントを見ると、CurrencyFormatter"£"クラスがありますが、それは、パラメーターとしてコンストラクターを起動しようとして、 ArgumentException(WinRT ドキュメントは非常に特殊です。例外に関する情報は実質的にありません)を取得した後でした。 ISO通貨記号が必要であることに気付きました(公平に言えば、パラメーター名は ですcurrencyCodeが、それでもそうです)。

今-私もそれらの1つを取得できますが、にCurrencyFormatterは別の問題があり、通貨の書式設定には適していません-書式設定できるのはdoublelongおよびulong型のみです-decimalオーバーロードはありません-状況によっては興味深い値エラーが発生する可能性があります.

では、WinRT.net で通貨を動的にフォーマットする方法は?

4

1 に答える 1

2

NumberFormatInfoクラスで古いスタイルのフォーマット文字列をまだ使用できることがわかりましたToString.. String.Format代わりに使用すると、機能します。

したがって、私の質問のコードを次のように書き直すことができます。

public string FormatCurrencyValue(string symbol, decimal val) 
{
  var format = (NumberFormatInfo)CultureInfo.CurrentUICulture.NumberFormat.Clone();
  //overwrite the currency symbol with the one I want to display
  format.CurrencySymbol = symbol;
  //pass the format to String.Format
  return string.Format(format, "{0:C2}", val);
}

これにより、望ましい結果が得られます。

于 2013-01-29T10:46:16.893 に答える