【发布时间】:2013-10-25 09:28:57
【问题描述】:
我正在尝试编写一个字符串格式,它将数字四舍五入或填充到小数点后两位,并且还显示带有括号的负数。这是在 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 的括号。不知何故,第一个和最后一个标记必须在中间的数字显示标记的舍入行为上有所体现。
有没有人知道如何格式化它以使其按我想要的方式工作?
【问题讨论】:
-
显然是一个错误。有谁知道这是否已在较新的 .Net 版本中得到修复? (我有.Net 4.0)。有谁知道无需创建专用的 Converter 类即可在 XAML 中工作的解决方法?最后,如果错误得到修复,是否会造成潜在的严重向后兼容性问题?
标签: c# .net string-formatting