Wie kann ich eine Zahl in eine Zeichenfolge mit führenden Nullen formatieren?


Antworten:


343

Ziemlich einfach:

Key = i.ToString("D2");

Dsteht für "Dezimalzahl", 2für die Anzahl der zu druckenden Ziffern.


7
Wenn Sie verwenden, erhalten string.Format("D2", value)Sie D2in der Ausgabe. das funktioniert nicht Wir müssen "{0:00}"in diesem Fall verwenden.
v.oddou

41
Sie sollten string.Format("{0:D2}", value)stattdessen verwenden. Nur zu sagen string.Format("D2", ...), ersetzt nichts, egal was passiert, da Sie keinen Platzhalter haben.
Infinitypanda

5
@infinitypanda erkennen, dass dies nur funktioniert, wenn valueein int ist. Wenn valuees sich zum Beispiel um ein Double handelt, muss esstring.Format("{0:00}", value)
derekantrican

Wenn wir über 'führende Ziffern' sprechen, denke ich, wäre die Antwort i.ToString ("00"); Dabei steht "00" für die führenden Nullen. Sie können diesen Betrag so weit wie möglich erhöhen.
Dedan


72

Wenn Sie die Breite beibehalten möchten, z. B. 10 Stellen, gehen Sie folgendermaßen vor

Key = i.ToString("0000000000");

Ersetzen Sie durch so viele Ziffern, wie Sie möchten.

i = 123wird dann ergeben Key = "0000000123".


63

Da dies noch niemand erwähnt hat, können Sie bei Verwendung von C # Version 6 oder höher (z. B. Visual Studio 2015) die Zeichenfolgeninterpolation verwenden , um Ihren Code zu vereinfachen. Anstatt zu verwenden string.Format(...), können Sie dies einfach tun:

Key = $"{i:D2}";

33

verwenden:

i.ToString("D10")

Siehe Int32.ToString (MSDN) und Standard Numeric Format Strings (MSDN).

Oder verwenden String.PadLeft. Beispielsweise,

int i = 321;
Key = i.ToString().PadLeft(10, '0');

Würde dazu führen 0000000321. ObwohlString.PadLeft würde für negative Zahlen nicht.

Siehe String.PadLeft (MSDN).


4
Ich denke, das wird dich verarschen, wenn du versuchst, es mit negativen Zahlen zu verwenden.
Mario

Danke - ich habe den zweiten benutzt. Ich habe das ".ToString ()" weggelassen - es funktioniert immer noch.
Sunsetquest

14

Normalerweise ist String.Format ("Format", Objekt) Objekt.ToString ("Format") vorzuziehen. Deshalb,

String.Format("{0:00000}", 15);  

ist vorzuziehen,

Key = i.ToString("000000");

4
Ja, wie @cja fragte, warum ist es vorzuziehen? Und ich argumentiere nicht gegen die Behauptung, ich würde gerne wissen warum.
Christopher King

Die erste Syntax "fühlt" sich präziser, vorhersehbarer und klarer an. Und es wäre besser angegeben als Key = String.Format ("{0: 00000}", 15); das wird mit Key = i.ToString ("000000") verglichen; Bei der ersten Syntax bin ich mir ziemlich sicher, dass ich genau das Ergebnis kenne, das ich erhalten werde, und wenn ich nur ein Zeichen entfernt bin, weiß ich genau, was ich ändern muss (Formatzeichenfolge. Kurz gesagt, für mich ist es vorzuziehen emotionale persönliche Präferenz, schwach unterstützt durch einen fast plausiblen halben Grund ;-) Also ist es dann entschieden?
Developer63

13

Versuchen:

Key = i.ToString("000000");

Persönlich würde ich jedoch sehen, ob Sie nicht direkt nach der Ganzzahl sortieren können, sondern nach der Zeichenfolgendarstellung.


7

Für interpolierte Zeichenfolgen:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"

3

Hier möchte ich, dass mein Nein auf 4 Ziffern begrenzt wird. Wenn es 1 ist, sollte es als 0001 angezeigt werden. Wenn es 11 ist, sollte es als 0011 angezeigt werden. Unten ist der Code.

        reciptno=1;//Pass only integer.

        string formatted = string.Format("{0:0000}", reciptno);

        TxtRecNo.Text = formatted;//Output=0001..

Ich habe diesen Code implementiert, um die Geldquittungsnummer zu generieren.


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.