如何将负数用括号格式化,但不使用$符号?

27

我在互联网上看到过一种格式化负数双精度值的方式,即用圆括号带有$符号,如货币类型。

我正在寻找一个.NET格式字符串,用于格式化:

12345.67 = 12,345.67

-12345.67 = (12,345.67)

2
VB.NET 还是 C#?标题和标签不一致。 - Oded
var ci = CultureInfo.GetCultureInfo("en-US");if (Thread.CurrentThread.CurrentCulture.DisplayName == ci.DisplayName) { ci = CultureInfo.CreateSpecificCulture("en-US"); ci.NumberFormat.CurrencyNegativePattern = 1; Thread.CurrentThread.CurrentCulture = ci; Thread.CurrentThread.CurrentUICulture = ci; } - Prashant Manjule
2个回答

67

通过MSDN上的条件格式来解救吧!

您可以一次指定多达三个不同的格式字符串部分,并使用分号将它们分隔开。如果您指定了两个格式字符串部分,则第一个用于正值和零值,而第二个用于负值;如果使用了三个部分,则第一个用于正值,第二个用于负值,第三个用于零值。

以下是此C#代码的输出:

        string fmt1 = "#,##0.00";
        string fmt2 = "#,##0.00;(#,##0.00)";
        double posAmount = 12345.67;
        double negAmount = -12345.67;
        Console.WriteLine("posAmount.ToString(fmt1) returns " + posAmount.ToString(fmt1));
        Console.WriteLine("negAmount.ToString(fmt1) returns " + negAmount.ToString(fmt1));
        Console.WriteLine("posAmount.ToString(fmt2) returns " + posAmount.ToString(fmt2));
        Console.WriteLine("negAmount.ToString(fmt2) returns " + negAmount.ToString(fmt2));

是什么:

posAmount.ToString(fmt1) returns 12,345.67
negAmount.ToString(fmt1) returns -12,345.67
posAmount.ToString(fmt2) returns 12,345.67
negAmount.ToString(fmt2) returns (12,345.67)

2

您可以使用FormatNumber函数:

FormatNumber(-100, UseParensForNegativeNumbers:=TriState.True)

将返回“(100)”

更多内容请参考MSDN


1
这是位于Microsoft.VisualBasic命名空间中的内容,如果要在C#中使用它,则需要先添加对Microsoft.VisualBasic的引用。 - Jon Egerton
谢谢Jon!感谢您的快速回答! - user715993
又一个(仿佛我需要更多)VB掌控的原因 :-) 成功添加了一行代码和一个复选框,现在可以用减号或括号运行报告。 - gchq

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接