Gibt es eine Möglichkeit, eine Standard- oder benutzerdefinierte Zeichenfolge im numerischen Format anzugeben, um immer das Vorzeichen auszugeben, sei es + ve oder -ve (obwohl ich nicht sicher bin, was es für Null tun soll?)
Gibt es eine Möglichkeit, eine Standard- oder benutzerdefinierte Zeichenfolge im numerischen Format anzugeben, um immer das Vorzeichen auszugeben, sei es + ve oder -ve (obwohl ich nicht sicher bin, was es für Null tun soll?)
Antworten:
Ja, du kannst. Es gibt eine bedingte Formatierung. Siehe Bedingte Formatierung in MSDN
z.B:
string MyString = number.ToString("+0;-#");
Wobei jeder durch ein Semikolon getrennte Abschnitt positive und negative Zahlen darstellt
oder:
string MyString = number.ToString("+#;-#;0");
Wenn Sie nicht möchten, dass die Null ein Pluszeichen hat.
+#;-#
, für den Wert 0 bekomme ich nur "+", ohne tatsächliche 0. für mich möchte ich, dass 0 als "+0" erscheint, also funktioniert das : +#;-#;+0
.
''
wird großartige Dinge bewirken! Schau dir das an : Changes.ToString("'('#' ▲)';'('#' ▼)';''")
! Es hat mir viel Zeit und Hunderte von if
Aussagen gespart ! :)
+0;-#
anstatt +#;-#;+0
Diese Antwort war für mich wirklich irreführend.
Sie können Formatzeichenfolgen auch in string.Format () verwenden. Die Formatzeichenfolge wird durch einen Doppelpunkt (':') vom Index getrennt.
var f = string.Format("{0}, Force sign {0:+#;-#;+0}, No sign for zero {0:+#;-#;0}", number);
Für die Zahl {+1, -1, 0} ergibt dies:
1, Kraftzeichen +1, Kein Vorzeichen für Null +1
-1, Kraftzeichen -1, Kein Vorzeichen für Null -1
0, Kraftzeichen +0, Kein Vorzeichen für Null 0
Sie können auch eine interpolierte Zeichenfolge verwenden string.Format
, um das gleiche Ergebnis zu erzielen:
var f = $"{number}, Force sign {number:+#;-#;+0}, No sign for zero {number:+#;-#;0}";
+#;-#
Formats für den Wert 0
+0;-#
. :)
+#;-#;+0
über , +#;-#
da dies macht es deutlicher , dass 0 als 0 formatiert werden
Im Gegensatz zu den anderen Antworten scheint es, dass Sie das Format verwenden müssen, wenn Sie +1, -1, +0 (für die Argumente 1, -1, 0) erhalten möchten:
String.Format("{0:+#;-#;+0}", 0)); // output: +0
oder
String.Format("{0:+0;-#}", 0)); // output: +0
Wenn Sie nur verwenden +#;-#
, wird nur +
(nicht +0
) für 0 angezeigt .
Der benutzerdefinierte Bezeichner "#" (unter https://msdn.microsoft.com/en-us/library/0c899ak8.aspx )
Beachten Sie, dass dieser Bezeichner niemals eine Null anzeigt, die keine signifikante Ziffer ist, selbst wenn Null die einzige Ziffer in der Zeichenfolge ist. Es wird nur dann Null angezeigt, wenn es sich um eine signifikante Ziffer in der angezeigten Zahl handelt.
Beachten Sie auch, dass Sie eine Dezimalgenauigkeit wie folgt angeben müssen:
String.Format("{0:+0.##;-#.##}", 0)); // output: +0
oder, wenn Sie nicht möchten, dass immer Nullen angezeigt werden, so:
String.Format("{0:+0.00;-#.00}", 0)); // output: +0.00
Für einen numerischen Ausdruck eines beliebigen Typs:
+###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;-###,###,###,###,###,###,###,###,###,##0.###,###,###,###,###,###,###,###,###,###;0
Verwenden Sie drei Teile für drei Fälle: positiv, negativ, null
Andere Aspekte des Beispiels:
Null ist nicht signiert. Sie können es als alles anzeigen lassen, z. B. "Null".
Absolutwerte kleiner als eins haben eine führende 0 vor dem Dezimalpunkt. Nach Geschmack einstellen.
Die Anzahl der Stellen steht für den größten und den kleinsten absoluten Dezimalwert. Nach Geschmack einstellen.
Das Dezimalzeichen ist kulturspezifisch. .NET-Ersatz.
Gruppentrennzeichen sind optional. Der Charakter ist kulturspezifisch. .NET-Ersatz. (Die Positionen sind ebenfalls kulturspezifisch, werden jedoch nur von Ihrer Formatzeichenfolge gesteuert.) Sie verwenden auch andere Zeichen als die Sonderzeichen für Format (einschließlich ,. # 0).
Ich kann nicht kommentieren, also mache ich hier eine Antwort (verrücktes Reputationssystem ....)
Sie können number.ToString ("+ 0; - #") sehr gut verwenden, um den UTC-String TimeFormat zu erstellen
Hier in PowerShell-Code gezeigt
"$([System.DateTime]::Now.ToString('HH:mm:ss.fff'))$($([System.TimeZoneInfo]::Local.GetUtcOffset([System.DateTime]::Now).TotalMinutes.ToString('+0;-#')))"
Vielen Dank an @gcores https://stackoverflow.com/users/40256/gcores