我正在尝试编写一个字符串格式,将数字舍入或填充到两位小数,并显示带有括号的负数。这是在WPF应用程序中,但它适用于任何.net StringFormat用例。例如:
最后一个,一个非常小的负数舍入到零,是问题所在。我仍然希望括号表示它是否定的。
我的第一个版本是字符串格式,如下所示:
{0:#,##0.00 ;(#,##0.00)}
这不起作用,因为它在应用开关正/负之前对数字进行舍入,因此认为0.00不是负数。
然后我尝试了这个,将括号逻辑分成它自己的格式块,在数字之前和之后:
{0:;(}{0:#,##0.00 ;#,##0.00}{0:;)}
然而,奇怪的是,这表现出与原始示例相同的行为。它适用于-0.01,但仍然不显示-0.001的括号。不知何故,第一个和最后一个令牌必须接受中间数字显示令牌的舍入行为。
有没有人有关于如何格式化它的想法,所以它按我想要的方式工作?
答案 0 :(得分: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));
选择基于符号的字符串格式。