web-dev-qa-db-ja.com

String.Format( "{0:C2}"、-1234)(通貨形式)は負の数を正の数として扱います

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

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

17
Shimmy

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

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

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

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

FormatCurrency(-1234.56, 2, 0, 0)

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

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

9
Shimmy

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

ただし、このように動作しない独自のNumberFormatInfoを作成できます。 「ほぼ正しい」既存のNumberFormatInfoを取得し、Clone()を呼び出して変更可能なコピーを作成し、次に CurrencyNegativePattern を適切に設定します(I値が欲しいと思う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);
}
_
30
Jon Skeet

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

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

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

String.Format("{0:" + symbol + "#,##0.00}", -1234)
22
epotter