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

C# 基于数字符号的自定义数字格式字符串,c#,formatting,string-formatting,C#,Formatting,String Formatting,我正在尝试格式化一个十进制(以百分比表示,不带%符号),在负数周围显示括号(),并按原样显示正数 var returnString = value.HasValue ? string.Format("{0:0.0;(0.0)}", value.Value * 100) : DefaultEmptyString; return returnString; 我的主要问题是,对于像-0.000491这样的数字,它在这个格式化方案中是零,它仍然应该显示

我正在尝试格式化一个十进制(以百分比表示,不带%符号),在负数周围显示括号(),并按原样显示正数

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

return returnString;
我的主要问题是,对于像-0.000491这样的数字,它在这个格式化方案中是零,它仍然应该显示括号,因为它是负零。 尽管如此,它正在消失

我可以停止使用,而是使用if语句,但似乎节分隔符应该起作用

你知道为什么格式不正确吗

来自文档:

如果要格式化的数字是负数,但根据第二部分的格式四舍五入后变为零,则生成的零将根据第一部分格式化

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

你知道为什么格式不正确吗

是否根据以下步骤正确完成:

如果要格式化的数字为负数,但根据第二部分中的格式四舍五入后变为零,则生成的零将根据第一部分格式化

因为我看不到任何可以覆盖默认行为的选项,一个选项是手动附加括号:

public string Format(decimal value)
{
   string s = (value*100).ToString("0.0;0.0");
   if(value < 0)
      s = "(" + s + ")";
    return s;
}
公共字符串格式(十进制值)
{
字符串s=(值*100).ToString(“0.0;0.0”);
如果(值<0)
s=“(“+s+”);
返回s;
}

integer或double等默认数据类型都不允许
0
为负值。如果您想要一个负0,那么您必须自己将负号添加到字符串中。