有没有办法指定标准或自定义数值格式字符串,以始终输出符号,无论是正还是负(虽然对于零应该做什么我不确定!)
有没有办法指定标准或自定义数值格式字符串,以始终输出符号,无论是正还是负(虽然对于零应该做什么我不确定!)
可以,你可以使用条件格式。请参阅MSDN中的条件格式
例如:
string MyString = number.ToString("+0;-#");
每个由分号分隔的部分代表正数和负数。
或者:
string MyString = number.ToString("+#;-#;0");
如果您不希望零有正号。
注意,在使用条件格式时,负值不会自动带有符号。您需要执行以下操作:
string MyString = number.ToString("+#;-#;0");
+0;-#
可以让你用更简洁的代码得到相同的结果。 - Andrewvar f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);
对于数字 { +1, -1, 0 } ,将会得到以下结果:
1,带正号 +1,0 不带符号 +1
-1,带负号 -1,0 不带符号 -1
0,带正号 +0,0 不带符号 0
您还可以使用插值字符串来获得相同的结果,而不是使用 string.Format
:
var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";
+#;-#
格式的实际结果。 - Kamil Szot+0;-#
。 :) - Andrew+#;-#;+0
而不是 +#;-#
,因为这使得 0 显示为 +0 更清晰。 - Edward与其他回答相反,如果您想要获得+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/en-us/library/0c899ak8.aspx)
请注意,即使零是字符串中唯一的数字,此说明符也永远不显示不是显著数字的零。 它仅在要显示的数字中零是显著数字时才显示零。
此外,请记住,如果需要任何小数精度,您需要像这样指定:
String.Format("{0:+0.##;-#.##}", 0)); // output: +0
如果你希望零始终显示出来,可以这样做:
String.Format("{0:+0.00;-#.00}", 0)); // output: +0.00
+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
对于三种情况(正数、负数和零),使用三个部分
示例的其他方面:
零没有符号。您可以将其显示为任何内容,例如“零”。
小于一的绝对值在小数点前有一个前导0。根据需要进行调整。
数字位数适用于最大和最小绝对十进制值。根据需要进行调整。
小数点字符是特定于文化的。.NET会替代它。
分组分隔符是可选的。该字符是特定于文化的。 .NET会替代它。(位置也是特定于文化的,但这仅受格式字符串控制。)您还可以使用除Format的特殊字符之外的任何其他字符(包括, . # 0)。
#,##0
格式足以满足任何数量的千位分隔符。 - navigator我无法评论,所以在这里回答(该破烂的声望系统....)
您可以很好地使用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
+#;-#
格式化后只会得到"+",而没有实际的0。我希望0显示为"+0",因此可以使用+#;-#;+0
格式化字符串来实现这一点。 - orion elenzil''
搭配使用会有很好的效果!看看这个:Changes.ToString("'('#' ▲)';'('#' ▼)';''")
!它节省了我大量时间和成百上千的if
语句! :) - Shahab+0;-#
代替+#;-#;+0
。这个答案对我来说真的很误导。 - Kamil Szotstring msg = $"今天股市{delta:▲;▼;~}。"
。 - Glenn Slayden