我正在使用String.Format("{0:C2}", -1234)
对数字进行格式化。
它总是将金额格式化为正数,而我希望它变成$ - 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)
String.Format("{0:$#,##0.00}", -1234)
的奥秘吗?或者我可以在哪里学到更多相关知识? - Gilbert R.我想我会简单地使用:
FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)
(在Microsoft.VisualBasic.Strings模块中)
或者用更简洁的话来说(这是我实际要使用的):
FormatCurrency(-1234.56, 2, 0, 0)
否则我会自己制作一个使用VB函数并传递自定义参数的自定义formatcurrency函数。
更多详细信息,请查看msdn中的FormatCurrency函数(Visual Basic)。
#region Format value to currency
/// <summary>
/// Method to format input in currency format
/// Input: -12345.55
/// Output:$-12,345.55
/// </summary>
/// <param name="Input"></param>
/// <returns></returns>
public static string FormatToCurrency(string Input)
{
try
{
decimal value = Convert.ToDecimal(Input);
CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US");
culture.NumberFormat.NumberNegativePattern = 2;
return string.Format(culture, "{0:C}", value);
}
catch (Exception)
{
return string.Empty;
}
}
#endregion