String.Format(“ {0:C2}&#8221 ;, -1234)(通貨形式)は負の数を正として扱います

StackOverflow https://stackoverflow.com/questions/1001114

質問

String.Format(" {0:C2}&quot ;, -1234)を使用して数値をフォーマットしています。

金額は常に正の数にフォーマットされますが、$ - 1234

になりたい
役に立ちましたか?

解決 3

単純に使用すると思います:

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

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

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

FormatCurrency(-1234.56, 2, 0, 0)

または、私は自分自身をカスタムパラメータを渡すVB関数を使用するカスタムformatcurrency関数にします。

詳細については、 FormatCurrency関数( Visual Basic) msdnで。

他のヒント

私はそれを括弧に入れている、つまり($ 1,234.00)としてフォーマットしていると言っていますか?もしそうなら、私はそれが米国の意図された行動だと思います。

ただし、このように動作しない独自の NumberFormatInfo を作成できます。 " mostly right"である既存の 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);
}

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

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

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

String.Format("{0:" + symbol + "#,##0.00}", -1234)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top