12

http://msdn.microsoft.com/en-us/library/6t7dwaa5.aspxによると、数値を通貨として表示する場合は、.ToString()を呼び出して、パラメーター(この場合は「C」)を渡すことができます。 「」

ただし、MSDNサイトからの以下の詳細に基づいて、マイナス(-)文字が自動的に削除されます。これは、私の値が正になることを意味します。

int value = -16325;   
// Display value using default ToString method.
Console.WriteLine(value.ToString());            // Displays -16325 
// Display value using some standard format specifiers.
Console.WriteLine(value.ToString("G"));         // Displays -16325
Console.WriteLine(value.ToString("C"));         // Displays ($16,325.00)
Console.WriteLine(value.ToString("D"));         // Displays -16325
Console.WriteLine(value.ToString("F"));         // Displays -16325.00
Console.WriteLine(value.ToString("N"));         // Displays -16,325.00
Console.WriteLine(value.ToString("X"));         // Displays FFFFC03B 

したがって、マイナス記号を付けて保持するにはどうすればよいですか。Contains( "-")メソッドを使用する必要があり、それがtrueの場合は、-を追加し直します。

このコードのようなもの(正しくコーディングされていない場合はお詫びしますが、アイデアは得られます)。

string x = (value.ToString().Contains("-") : "-" + value.ToString("C") ?  + value.ToString("C"));
4

7 に答える 7

19

これは、の値によって異なりますCurrentCulture.NumberFormat.CurrencyNegativePattern。可能な値は0〜15です。

0 : ($12,345.00)
1 : -$12,345.00
2 : $-12,345.00
3 : $12,345.00-
4 : (12,345.00$)
5 : -12,345.00$
6 : 12,345.00-$
7 : 12,345.00$-
8 : -12,345.00 $
9 : -$ 12,345.00
10 : 12,345.00 $-
11 : $ 12,345.00-
12 : $ -12,345.00
13 : 12,345.00- $
14 : ($ 12,345.00)
15 : (12,345.00 $)

したがって、次のような1出力を取得するように設定する必要があるようです。

int value = -12345;

var numberFormat = (NumberFormatInfo)CultureInfo.CurrentCulture.NumberFormat.Clone();
numberFormat.CurrencyNegativePattern = 1;

string numberAsCurrency = value.ToString("C", numberFormat)

ただし、リモートサーバーであるというコメントに基づいて、常に特定の方法でフォーマットする場合は、スレッド全体のカルチャを制御された値に設定する方がよい場合があります。これはToString()、そのスレッドでの後続のすべての呼び出しに影響します。

int value = -12345;
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-US");
Thread.CurrentThread.CurrentCulture.NumberFormat.CurrencyNegativePattern = 1;
string numberAsCurrency = value.ToString("C");
于 2013-01-03T11:13:07.203 に答える
8

NumberFormatInfo現在のロケールからカスタムを作成できます。次に、次のように指定できますCurrencyNegativePattern

int value = -16325;
var culture = CultureInfo.CurrentCulture;
var mutableNfi = (NumberFormatInfo)culture.NumberFormat.Clone();
mutableNfi.CurrencyNegativePattern = 1;
Console.WriteLine(value.ToString("C", mutableNfi)); // Displays (-$16,325.00)
于 2013-01-03T11:08:55.467 に答える
4

あなたはこれを試してみたいかもしれません

        Console.WriteLine((-1234).ToString("c"));
        CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture;
        CultureInfo newCulture = new CultureInfo(currentCulture.IetfLanguageTag);
        newCulture.NumberFormat.CurrencyNegativePattern = 1;
        Thread.CurrentThread.CurrentCulture = newCulture;
        Console.WriteLine((-1234).ToString("c"));

MSDN:NumberFormatInfo.CurrencyNegativePatternプロパティ の詳細...

于 2013-01-03T11:08:31.583 に答える
3

マシンのローカリゼーション設定によって異なります。多くのロケールでの負の通貨は次のように表され( amount )ます。したがって、ここでは.netがそれを使用しています。これをオーバーライドする方法がわかりません。しかし、それがここで起こっていることです。

于 2013-01-03T11:06:11.810 に答える
3

これは文化によって異なります。これはNumberFormatInfo.CurrencyNegativePattern、米国では負の数を示すために括弧を使用しているように見える-を使用します。(正の数には括弧がありません。)

したがって、現在のクローンを作成し、関連するのを変更することができますが、そうすることには注意が必要です。一般に、.NETが使用する文化情報がその文化に適していることを信頼する必要があります。もちろん、カルチャ固有の表現が必要かどうかを決定する必要があります。必要でない場合は、不変のカルチャを使用することをお勧めします。CultureInfoCurrencyNegativePatternNumberFormatInfo

于 2013-01-03T11:07:36.220 に答える
1

あなたはこれを使うことができます:

string text = value < 0 ? "-" + (-value).ToString("C") : value.ToString("C");

ただし、予期しない結果(-$ 1.00など)を防ぐために、ローカリゼーション設定が変更されないようにしてください。

于 2013-01-03T11:07:57.990 に答える
0

このメソッドを使用して通貨文字列を取得できます。角かっこで囲まれている場合にのみ、角かっこを削除して「-」を追加します。

private string ToCurrencyString(decimal amount)
{
    string c = amount.ToString("C");
    if (c.StartsWith("(") && c.EndsWith(")"))
    {
        c = "-" + c.SubString(1, c.Length - 2);
    }
    return c;
}
于 2013-01-03T11:09:25.607 に答える