3

我正在尝试编写一种字符串格式,它将数字四舍五入或填充到小数点后两位,并且还显示带有括号的负数。这是在 WPF 应用程序中,但它适用于任何 .net StringFormat 用例。例如:

  • 2.0 -> 2.00
  • -2.0 -> (2.00)
  • 0.01 -> 0.01
  • -0.01 -> (0.01)
  • 0.001 -> 0.00
  • -0.001 -> (0.00)

最后一个是一个非常小的负数,四舍五入为零,这就是问题所在。我仍然希望括号表明它是否定的。

我的第一个版本是字符串格式,如下所示:

{0:#,##0.00 ;(#,##0.00)}

这不起作用,因为它在应用正/负开关之前对数字进行四舍五入,因此认为 0.00 不是负数。

然后我尝试了这个,将括号逻辑分成自己的格式化块,在数字之前和之后:

{0:;(}{0:#,##0.00 ;#,##0.00}{0:;)}

然而,奇怪的是,这表现出与原始示例相同的行为。它适用于 -0.01,但仍然不显示 -0.001 的括号。不知何故,第一个和最后一个标记必须在中间的数字显示标记的舍入行为上有所体现。

有没有人有关于如何格式化它的想法,所以它可以按照我想要的方式工作?

4

1 回答 1

2

当你说;(#,##0.00)或时{0:;(}。该值已经四舍五入为 0。因此它不会为您提供您期望的结果。

所以最好在符号为负之前检查它。

var value = -0.001M;
string decimalFormat = value > 0 ? "{0:#,##0.00}" : "({0:#,##0.00})";
Console.WriteLine(String.Format(decimalFormat, value));

应该根据符号在字符串格式之间进行选择。

于 2013-10-30T10:43:29.073 回答