20

String.Format("{0:C2}", -1234)数値の書式設定に使用しています。

$ - 1234になりたいのですが、常に金額を正の数値にフォーマットします

4

4 に答える 4

33

かっこで囲んでいる、つまり としてフォーマットしていると言っているのは正しい($1,234.00)ですか?もしそうなら、それは米国の意図した行動だと思います。

ただし、NumberFormatInfoこのように動作しない独自のものを作成できます。NumberFormatInfo「ほぼ正しい」既存のものを取得し、呼び出しClone()て変更可能なコピーを作成し、CurrencyNegativePattern適切に設定します(値2が必要だと思います)。

例えば:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        var usCulture = CultureInfo.CreateSpecificCulture("en-US");
        var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
        clonedNumbers.CurrencyNegativePattern = 2;
        string formatted = string.Format(clonedNumbers, "{0:C2}", -1234);
        Console.WriteLine(formatted);
    }
}

これは $-1,234.00 を出力します。実際に正確に $-1234 が必要な場合は、CurrencyGroupSizesプロパティをに設定して、代わりに書式文字列としてnew int[]{0}使用する必要があります。"{0:C0}""{0:C2}"

編集:基本的に同じことを行うヘルパーメソッドを次に示します。

private static readonly NumberFormatInfo CurrencyFormat = CreateCurrencyFormat();

private static NumberFormatInfo CreateCurrencyFormat()
{
    var usCulture = CultureInfo.CreateSpecificCulture("en-US");
    var clonedNumbers = (NumberFormatInfo) usCulture.NumberFormat.Clone();
    clonedNumbers.CurrencyNegativePattern = 2;
    return clonedNumbers;
}

public static string FormatCurrency(decimal value)
{
    return value.ToString("C2", CurrencyFormat);
}
于 2009-06-16T12:24:14.820 に答える
24

もう1つの簡単なオプションは、フォーマット文字列を手動で指定することです。

String.Format("{0:$#,##0.00}", -1234)

または、通貨記号をパラメータにする必要がある場合は、これを行うことができます

String.Format("{0:" + symbol + "#,##0.00}", -1234)
于 2011-06-21T15:56:57.067 に答える
10

私は単に使用すると思います:

FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)

(Microsoft.VisualBasic.Strings モジュール内)

または短い言葉で(これは実際に使用するものです):

FormatCurrency(-1234.56, 2, 0, 0)

または、カスタム パラメータを渡す VB 関数を使用するカスタム formatcurrency 関数を作成します。

詳細については、msdn のFormatCurrency 関数 (Visual Basic)を参照してください。

于 2009-06-16T12:43:48.947 に答える