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

Shi*_*mmy 17 c# vb.net string.format currency string-formatting

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

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

Jon*_*eet 30

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

这打印$ -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);
}
Run Code Online (Sandbox Code Playgroud)

  • 很棒的捕获.我跑了一个快速的字符串.格式('{0:C2}', - 1234)在嘘声中,得到了' - $ 1,234.00',并认为Shimmy在某种程度上是错误的(对不起Shimmy).我没有意识到加拿大和美国在NumberFormat.CurrencyNegativePattern上有所不同. (2认同)

epo*_*ter 22

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

String.Format("{0:$#,##0.00}", -1234)
Run Code Online (Sandbox Code Playgroud)

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

String.Format("{0:" + symbol + "#,##0.00}", -1234)
Run Code Online (Sandbox Code Playgroud)


Shi*_*mmy 9

我想我会简单地使用:

FormatCurrency(-1234.56, 2, UseParensForNegativeNumbers:=TriState.False)
Run Code Online (Sandbox Code Playgroud)

(在Microsoft.VisualBasic.Strings模块中)

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

FormatCurrency(-1234.56, 2, 0, 0)
Run Code Online (Sandbox Code Playgroud)

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

有关更多详细信息,请参阅msdn 中的FormatCurrency函数(Visual Basic).