String.Format(“ {0:C2}&#8221 ;, -1234)(通貨形式)は負の数を正として扱います
-
05-07-2019 - |
質問
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)