是否有任何方法我可以指定一个标准或自定义数字格式字符串总是输出符号,是+ve或-ve(尽管它应该为零做什么,我不确定!)


是的,你可以。 有条件格式。参见MSDN中的条件格式

eg:

string MyString = number.ToString("+0;-#");

用分号分隔的每个部分代表正数和负数

or:

string MyString = number.ToString("+#;-#;0");

如果你不想让0带正号。


注意,当使用条件格式时,负数不会自动获得符号。你需要做的

string MyString = number.ToString("+#;-#;0");

你也可以在string.Format();格式字符串用冒号(':')与索引分隔。

var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);

对于数字{+1,-1,0},得到:

1,力符号+1,0 +1没有符号 -1,强制符号-1,零没有符号-1 0,强制符号+0,0没有符号

也可以使用插值字符串来代替字符串。格式以获得相同的结果:

var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";

与其他答案相反,如果你想获得+1,-1,+0(对于参数1,-1,0),你需要使用以下格式:

String.Format("{0:+#;-#;+0}", 0));  // output: +0

or

String.Format("{0:+0;-#}", 0));  // output: +0

如果你只使用+#;-#,它将为0显示+(而不是+0)。

“#”自定义说明符(在https://msdn.microsoft.com/en-us/library/0c899ak8.aspx)

请注意,此说明符永远不会显示不是有效数字的零,即使零是字符串中唯一的数字。只有当它是所显示数字中的有效数字时,它才会显示0。

同时请记住,如果你需要任何十进制精度,你需要这样指定它:

String.Format("{0:+0.##;-#.##}", 0));  // output: +0

或者,如果你不想总是出现0,像这样:

String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00

对于任何类型的数值表达式:

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0

在三种情况下使用三个部分:阳性;阴性;零

这个例子的其他方面:

Zero is not signed. You could have it show as anything, such as "zero". Absolute values less than one have a leading 0 before the decimal point. Adjust to taste. Number of digits is for the largest and smallest absolute decimal values. Adjust to taste. Decimal point character is culture-specific. .NET substitutes. Grouping separators are optional. The character is culture-specific. .NET substitutes. (The positions are also culture-specific but that's only controlled by your format string.) You also use any other character except the special characters for Format (which include , . # 0).


我不能评论,所以我在这里做一个回答(坚果声誉系统....)

你可以使用number.ToString("+0;-#")很好地产生UTC字符串时间格式

这里显示在PowerShell代码中

"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"

谢谢@gcores https://stackoverflow.com/users/40256/gcores