8

金額と通貨コード(USD、JPY、CAD、EURなど)の料金表があり、通貨を適切にフォーマットする最も簡単な方法を探しています。ローカルカルチャーコード(USA)を使用し、decimal.ToString( "c")を取得すると、$ 0.00の出力が得られますが、コードに基づいた正しい通貨記号と小数点以下の桁数が必要です。

このためのライブラリはありますか?もちろん、それぞれのswitchステートメントとカスタムルールを作成することもできますが、これは以前に行われたに違いないと思いました。

アップデート:

JonBのサンプルコードを次のように変更しました

static IDictionary<string, string> GetCurrencyFormatStrings()
{
    var result = new Dictionary<string, string>();

    foreach (var ci in CultureInfo.GetCultures(CultureTypes.AllCultures))
    {
        try
        {
            var ri = new RegionInfo(ci.Name);
            result[ri.ISOCurrencySymbol] =
                  string.Format("{0}#,#0.{1};({0}#,#0.{1})",
                                ri.CurrencySymbol,
                                new string('0', 
                                i.NumberFormat.CurrencyDecimalDigits));
        }
        catch { }
    }

    return result;
}

これにより、Amount.ToString(Currency ["JPY"])に移動するだけで、ローカルコンテキストでコンマ区切り文字が出力されますが、正しい通貨記号と小数点以下の桁数が自動的に入力されます。

誰かがこれを行うためのよりクリーンな方法を持っているかどうか私に知らせてください、さもなければ私はジョンの答えをまもなく正しいとマークします。

4

3 に答える 3

5

を渡すことによって行う必要がありますCultureInfo:

CultureInfo ci = new CultureInfo("en-GB");
amount.ToString("C", ci);
于 2012-11-13T16:52:36.057 に答える
2

ISO 通貨記号 (USD) から通貨記号 ($) への辞書を作成できます。

static void Main(string[] args)
{
    var symbols = GetCurrencySymbols();

    Console.WriteLine("{0}{1:0.00}", symbols["USD"], 1.5M);
    Console.WriteLine("{0}{1:0.00}", symbols["JPY"], 1.5M);

    Console.ReadLine();
}

static IDictionary<string, string> GetCurrencySymbols()
{
    var result = new Dictionary<string, string>();

    foreach (var ci in CultureInfo.GetCultures(CultureTypes.AllCultures))
    {
        try
        {
            var ri = new RegionInfo(ci.Name);
            result[ri.ISOCurrencySymbol] = ri.CurrencySymbol;                    
        }
        catch { }
    }

    return result;
}

これが基本的な考え方です。必要に応じて微調整する必要があります。

確かにCultureInfoクラスを使用して特定のカルチャの文字列に変換できますが、Alexei のコメントに記載されているように、各文字列が少し異なります (1.00 対 1,00 など)。どちらを使用するかは、ニーズによって異なります。

于 2012-11-13T17:54:15.650 に答える