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

245

Ich habe eine Nummer, die ich in eine Zeichenfolge konvertieren muss. Zuerst habe ich das benutzt:

Key = i.ToString();

Aber mir ist klar, dass es in einer seltsamen Reihenfolge sortiert wird, und deshalb muss ich es mit Nullen auffüllen. Wie könnte ich das machen?

Mandy Weston
quelle

Antworten:

343

Ziemlich einfach:

Key = i.ToString("D2");

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

Mario
quelle
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
198

Siehe Zeichenfolgenformatierung in C # einige Anwendungsbeispiele für String.Format

Eigentlich ein besseres Beispiel für die Formatierung von int

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

oder verwenden Sie String Interpolation :

$"{15:00000}";                           // "00015"
Paul
quelle
2
Beachten Sie, dass String.Format ("{0: 00000}", "15"); gibt "15" zurück, dh es funktioniert nicht für eine Zeichenfolge.
Paul McCarthy
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".

Øyvind Bråthen
quelle
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}";
DavidG
quelle
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).

Firefox1986
quelle
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");
Chameera Dedduwage
quelle
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.

Marc Gravell
quelle
7

Für interpolierte Zeichenfolgen:

$"Int value: {someInt:D4} or {someInt:0000}. Float: {someFloat: 00.00}"
Alan Samet
quelle
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.

Saktiprasad Swain
quelle
1
int num=1;
string number=num.ToString().PadLeft(4, '0')

Ausgabe = "00001"

BEARBEITEN: Geändert, um dem PadLeft-Betrag zu entsprechen

Gayan Chinthaka Dharmarathna
quelle