C# 用于始终显示符号的自定义数字格式字符串

C# 用于始终显示符号的自定义数字格式字符串,c#,.net,formatting,string-formatting,C#,.net,Formatting,String Formatting,是否有任何方法可以指定一个标准或自定义数字格式字符串来始终输出符号,可以是+ve或-ve(尽管它应该为零做什么,我不确定!)是的,您可以。 有条件格式。看 例如: 其中,每个由分号分隔的部分表示正数和负数 或: 如果不希望零有加号。注意,使用条件格式时,负值不会自动得到一个符号。你需要做什么 string MyString = number.ToString("+#;-#;0"); 也可以在string.format()中使用格式字符串;格式字符串与索引之间用冒号(“:”)分隔 对于数字{+1

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

是的,您可以。 有条件格式。看

例如:

其中,每个由分号分隔的部分表示正数和负数

或:


如果不希望零有加号。

注意,使用条件格式时,负值不会自动得到一个符号。你需要做什么

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

也可以在string.format()中使用格式字符串;格式字符串与索引之间用冒号(“:”)分隔

对于数字{+1,-1,0},这给出:

1,强制符号+1,零+1无符号
-1,强制符号-1,零-1无符号
0,强制符号+0,零0无符号

也可以使用插值字符串而不是
string.Format
来获得相同的结果:

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

如果您只使用
+#-#它将仅显示0的
+
(而不是
+0

自定义说明符“#”

请注意,此说明符从不显示非有效数字的零,即使零是字符串中的唯一数字。只有当它是正在显示的数字中的有效数字时,它才会显示零

此外,请记住,如果您需要任何十进制精度,您需要这样指定:

String.Format("{0:+0.##;-#.##}", 0));  // output: +0
String.Format("{0:+0.00;-#.00}", 0));  // output: +0.00
或者,如果你不想总是出现零,比如:

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

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

+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
三种情况下使用三个部分:阳性;消极的零

示例的其他方面:

  • 零没有签名。你可以让它显示为任何东西,比如“零”

  • 小于1的绝对值在小数点前有一个前导0。适应口味

  • 位数表示最大和最小的绝对十进制值。适应口味

  • 小数点字符是特定于区域性的。净替代品

  • 分组分隔符是可选的。这个角色是特定于文化的。净替代品。(位置也是特定于区域性的,但这仅由格式字符串控制。)除了格式的特殊字符(包括,.#0)之外,您还可以使用任何其他字符


我无法发表评论,所以我在这里做了回答(nuts声誉系统…)

您可以很好地使用number.ToString(“+0;-#”)来生成UTC字符串时间格式

这里显示的是PowerShell代码

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

谢谢@gcores

修复了一个错误,即负片没有得到负号-#,对于值0,我只得到“+”,没有实际的0。对我来说,我希望0显示为“+0”,这样就可以了:
+#-#+0
。谢谢!将此与
混合使用将产生巨大的效果!看看这个:
Changes.ToString(“(”#▲)';'('#' ▼)';''")!它节省了我很多时间和数百条
if
语句!)@orionelenzil我也有同样的问题。你也可以做
+0;-#
而不是
+#-#+0
这个答案对我来说确实有误导性。@Shahab我喜欢它。请注意,如果你不想…
字符串msg=$“股市是{delta:▲;▼;~} 今天。”;
。你答案的最后一行应该是“默认格式0,强制符号+,零0无符号。”因为这是值0的
+-
格式的实际结果谢谢你,卡米尔-我错过了。我现在更正了强制符号格式:++-++0(而不是+++-#)您可以使用更简单的格式获得强制符号行为:
+0;-#
:)@Andrew,确实如此,但我更喜欢
+#-#+0
而不是
+#-#
,因为这更清楚地表明,0将被格式化为+0,正如其他人所指出的,
+0;-#
使用更干净的代码可以得到相同的结果。
+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"