22

私のプロジェクトには、組み込みの{0:C}通貨形式で通貨を表示しようとする場所がたくさんあります。数値が負の場合は、値を括弧で囲みます。代わりにマイナス記号を使用したい。

私の web.config では、カルチャが に設定されてautoおり、それは に解決されen-USます。

理想的な解決策は、グローバルな web.config または文化{0:C}の否定的な兆候を表示するその他の設定ですen-USが、私は他のそれほど素晴らしい解決策も受け入れています。

4

3 に答える 3

21

NumberFormatInfo.CurrencyNegativePatternおそらく1である正しいものを指定する必要があります。

Decimal dec = new Decimal(-1234.4321);
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
culture.NumberFormat.CurrencyNegativePattern = 1; 
String str = String.Format(culture, "{0:C}", dec);
Console.Write(str);

デモ: http://ideone.com/HxSqT

出力:

-$1,234.43
于 2012-07-27T21:59:43.520 に答える
18

ここでの答えを組み合わせることで、あなたが望むものに近づくことができると思います。

protected void Application_BeginRequest()
{
    var ci = CultureInfo.GetCultureInfo("en-US");

    if (Thread.CurrentThread.CurrentCulture.DisplayName == ci.DisplayName)
    {
        ci = CultureInfo.CreateSpecificCulture("en-US");
        ci.NumberFormat.CurrencyNegativePattern = 1;
        Thread.CurrentThread.CurrentCulture = ci;
        Thread.CurrentThread.CurrentUICulture = ci;
    }
}

このような単一の文化を扱うコードを持ちたくない場合...独自の文化を構築する必要があると思います...この質問を確認してください

于 2012-07-27T22:17:07.393 に答える
1

私があなたの質問を理解する限り。

カルチャに応じて通貨形式を表示したい。

カルチャ固有のことを行うたびに、.NET はThread.CurrentThread.CurrentCultureと を調べますThread.CurrentThread.CurrentUICulture

global.asaxBeginRequestメソッドで ASP.NET に必要なカルチャを設定できます。

protected void Application_BeginRequest()
{
    var ci = CultureInfo.GetCultureInfo("en-US"); // put the culture you want in here

    Thread.CurrentThread.CurrentCulture = ci;
    Thread.CurrentThread.CurrentUICulture = ci;
}
于 2012-07-27T21:57:19.277 に答える