String.Format(“{0:C2}”, – 1234)(货币格式)将负数视为正数

我使用String.Format("{0:C2}", -1234)来格式化数字。

它总是将数量格式化为正数,而我希望它变为$ 1234

我是否正确地说它将它放在括号中,即它将其格式化为($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); } 

另一个简单的选项是手动指定格式字符串。

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

或者,如果货币符号需要是参数,则可以执行此操作

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

我想我会简单地使用:

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

(在Microsoft.VisualBasic.Strings模块中)

或者用更短的词语(这就是我实际要使用的):

 FormatCurrency(-1234.56, 2, 0, 0) 

或者我将自己制作一个自定义格式货币函数,它使用VB函数传递我的自定义参数。

有关详细信息,请查看msdn中的FormatCurrency函数(Visual Basic) 。