webentwicklung-frage-antwort-db.com.de

Benutzerdefinierte Zeichenfolge im numerischen Format, um immer das Vorzeichen anzuzeigen

Gibt es eine Möglichkeit, eine standardmäßige 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 sollte!)

171
Craig Shearer

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.

274
gcores

Beachten Sie, dass bei der Verwendung der bedingten Formatierung der negative Wert nicht automatisch ein Vorzeichen erhält. Das musst du tun

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

Sie können auch Formatzeichenfolgen in string.Format () verwenden. Die Formatzeichenfolge wird vom Index durch einen Doppelpunkt (':') 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 sich:

1, Vorzeichen +1 erzwingen, Kein Vorzeichen für Null +1
- 1, Force-Vorzeichen -1, kein Vorzeichen für Null -1
0, Force-Vorzeichen +0, Kein Vorzeichen für Null 0

Sie können auch eine interpolierte Zeichenfolge anstelle von string.Format Verwenden, um dasselbe Ergebnis zu erhalten:

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

Im Gegensatz zu den anderen Antworten scheint es, dass Sie das folgende Format verwenden müssen, wenn Sie +1, -1, +0 (für 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 (um 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 bei der angezeigten Zahl um eine signifikante Ziffer handelt.

Denken Sie auch daran, dass Sie, wenn Sie eine Dezimalgenauigkeit benötigen, diese folgendermaßen angeben müssen:

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

oder, wenn du nicht willst, dass immer Nullen auftauchen, so:

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

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önnten es als alles zeigen lassen, wie zum Beispiel "Null".

  • Absolutwerte kleiner als eins haben eine führende 0 vor dem Dezimalpunkt. Nach Geschmack einstellen.

  • Die Anzahl der Stellen gibt den größten und den kleinsten absoluten Dezimalwert an. Nach Geschmack einstellen.

  • Das Dezimalzeichen ist kulturspezifisch. .NET-Ersatz.

  • Gruppierungstrennzeichen sind optional. Der Charakter ist kulturspezifisch. .NET-Ersatz. (Die Positionen sind auch kulturspezifisch, dies wird jedoch nur von Ihrer Formatzeichenfolge gesteuert.) Sie können auch jedes andere Zeichen außer den Sonderzeichen für Format (einschließlich. # 0) verwenden.

0
Tom Blodget