基于数字符号的自定义数字格式字符串

时间:2013-04-01 17:01:03

标签: c# formatting string-formatting

我正在尝试格式化小数(不带%符号的百分比),在负数周围显示括号()并按原样显示正数。

var returnString = value.HasValue
            ? string.Format("{0:0.0;(0.0)}", value.Value * 100) :
            DefaultEmptyString;

return returnString;

我的主要问题是对于诸如-0.000491之类的数字,在这种格式化方案中它是零,它仍然应该显示括号,因为它是负零。 尽管如此,它正在迷失。

我可以停止使用section separator并使用 if 语句,但看起来部分分隔符应该可以解决问题。

为什么格式化没有正确完成的任何想法?

2 个答案:

答案 0 :(得分:0)

来自文档:http://msdn.microsoft.com/en-US/library/0c899ak8%28v=vs.80%29.aspx

“如果要格式化的数字为负数,但在根据第二部分中的格式进行四舍五入后变为零,则根据第一部分格式化结果零。”

格式正确,您需要if语句。

答案 1 :(得分:0)

  

为什么格式化没有正确完成的任何想法?

根据documentation 正确完成

  

如果要格式化的数字为负数,但在根据第二部分中的格式进行四舍五入后变为零,则根据第一部分格式化结果零。

由于我没有看到任何可用的选项会覆盖该默认行为,因此一个选项是手动附加括号:

public string Format(decimal value)
{
   string s = (value*100).ToString("0.0;0.0");
   if(value < 0)
      s = "(" + s + ")";
    return s;
}