我正在使用String.Format("{0:C2}", -1234)
格式化数字。
它总是将金额格式化为正数,而我希望将其变成$ - 1234
我是说对了吗,就是将其格式化为($1,234.00)
吗?如果是这样,我相信这是美国的预期行为。
但是,您可以创建自己的NumberFormatInfo
,但这种行为不会发生。取得一个“大致正确”的现有NumberFormatInfo
,调用Clone()
进行可变复制,然后适当地设置CurrencyNegativePattern
(我想您希望值2)。
例如:
CurrencyNegativePattern
此打印$ -1,234.00。如果确实需要$ -1234,则需要将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);
}
}
属性设置为CurrencyGroupSizes
,并使用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)
(在Microsoft.VisualBasic.Strings模块中)
或者用简短的词(这就是我实际要使用的语言:]
String.Format("{0:" + symbol + "#,##0.00}", -1234)
或者我将使自己成为一个自定义formatcurrency函数,该函数使用VB函数传递我的自定义参数。
有关更多详细信息,请查看msdn中的FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)
。>
FormatCurrency(-1234.56, 2, 0, 0)