2017-03-10 2 views
2

Ich formatiere einen BigInteger-Wert von 0 und eine leere Zeichenfolge als Ergebnis erhalten. Ist das das erwartete Verhalten?Formatieren BigInteger führt leer für 0

System.Numerics.BigInteger value = 0; 
string xx = value.ToString("#", System.Globalization.CultureInfo.InvariantCulture); 

xx ist string.Empty nach diesen beiden Aussagen. Wenn ich Wert auf 10 setze, bekomme ich "10".

+0

Plus eins. Es ist offensichtlich von Entwurf, aber sicher ist es ungefähr so ​​nützlich wie eine Falltür in einem Kanu? – Bathsheba

Antwort

5

Ja, das ist das erwartete Verhalten. Von MSDN:

Wenn der Wert, der formatiert wird eine Ziffer in der Position hat, wo die „#“ -Symbol in dem Format-String erscheint, wird diese Ziffer auf den Ergebnis-String kopiert. Ansonsten wird nichts in dieser Position in der Ergebniszeichenfolge gespeichert.

Emphasis Mine

Sie können 0 als Format-String stattdessen verwenden, wenn Sie immer mindestens eine Ziffer wollen:

string xx = value.ToString("0", System.Globalization.CultureInfo.InvariantCulture); 

Ausbeuten:

  • 0"0"
  • 10"10"
2

finden Sie in der Dokumentation für das "#" custom-Spezifizierer:

https://msdn.microsoft.com/en-us/library/0c899ak8(v=vs.110).aspx#SpecifierD

Beachten Sie, dass dieser Bezeichner nie eine Null anzeigt, die keine signifikante Stelle ist, auch 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 Nummer handelt.

In Ihrem Fall ist 0 keine signifikante Ziffer und wird daher nicht angezeigt.

Verwenden Sie stattdessen 0 als Spezifizierer.