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

问题描述 投票:19回答:4

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

它总是将金额格式化为正数,而我希望将其变成$ - 1234

c# vb.net string-formatting currency string.format
4个回答
31
投票

我是说对了吗,就是将其格式化为($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}"

23
投票

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

"{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);
}

9
投票

我想我会简单地使用:

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) 。>


0
投票
FormatCurrency(-1234.56, 2, 0, 0)
© www.soinside.com 2019 - 2024. All rights reserved.