自定义数字格式字符串,始终显示符号


Answers:


296

是的你可以。有条件格式。请参阅MSDN中的条件格式

例如:

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

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

要么:

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

如果您不希望零具有加号。


1
修复了底片没有减负的错误。
罗曼·斯塔科夫

非常感谢!我已经花了一个小时的时间摸索着弄清楚C#中printf的'+'标志的含义,您给了我答案。
rbaleksandar 2012年

4
+#;-#,该值0我得到的只是“+”,没有实际的0对我来说我想0显示为“+0”,所以这个作品:+#;-#;+0
Orion elenzil 2014年

3
谢谢!混合使用''会做很多事情!看这个:Changes.ToString("'('#' ▲)';'('#' ▼)';''")!它为我节省了大量时间和数百条if语句!:)
Shahab 2015年

1
@orionelenzil我有同样的问题。您也可以+0;-#代替它。+#;-#;+0这个答案对我来说确实是一种误导。
卡米尔·索佐特

56

请注意,使用条件格式设置时,负值不会自动获得符号。你需要做

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

正如其他人指出的那样,+0;-#使用更简洁的代码可以为您提供相同的结果。
安德鲁

32

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

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

对于数字{+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}";

答案的最后一行应为“默认格式0,强制符号+,零表示零”。因为那是+#;-#值0格式的实际结果
Kamil Szot

谢谢你,卡米尔-我错过了。我现在已更正了强制标志格式:+#;-#; + 0(而不是+#;-#)
爱德华(Edward

1
您可以使用以下更简单的格式来获取力标行为:+0;-#。:)
安德鲁

@Andrew,的确如此,但是我更喜欢+#;-#;+0+#;-#因为这样可以更清楚地将0设置为+0
Edward

10

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

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

要么

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

如果仅使用+#;-#,它将仅显示+(不显示+0)0。

“#”自定义说明符(位于https://msdn.microsoft.com/zh-cn/library/0c899ak8.aspx

请注意,即使字符串中的唯一数字为零,该说明符也不会显示不是有效数字的零。仅当显示的数字中有一个有效数字时,它才会显示零。

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

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

或者,如果您不想零总是显示出来,就像这样:

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

1

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

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

在以下三种情况下使用三个部分:正,负,零

该示例的其他方面:

  • 零未签名。您可以将其显示为任何东西,例如“零”。

  • 小于1的绝对值在小数点前以0开头。调整口味。

  • 数字位数代表最大和最小绝对十进制值。调整口味。

  • 小数点字符是特定于文化的。.NET替代品。

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


0

我无法发表评论,所以我在这里回答(坚果信誉系统....)

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

在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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.