Ruby on Rails: Wie fügt man Nullen vor einer Zahl hinzu, wenn diese unter 10 liegt?

110

Ich möchte einstellige Zahlen wie folgt in zweistellige Zahlen umwandeln:

9 ==> 09
5 ==> 05
12 == 12
4 ==> 04

Ich denke, ich könnte ein paar if-else-Anweisungen setzen (wenn die Zahl unter 10 liegt, dann mache einen gsub), aber ich denke, das ist eine schreckliche Codierung. Ich weiß, dass Rails number_with_precision hat, aber ich sehe, dass dies nur für Dezimalzahlen gilt. Irgendwelche Ideen, wie man einstellige in zweistellige Zahlen umwandelt?

sjsc
quelle

Antworten:

142

Meinten Sie sprintf '%02d', n?

irb(main):003:0> sprintf '%02d', 1
=> "01"
irb(main):004:0> sprintf '%02d', 10
=> "10"

Möglicherweise möchten Sie in Zukunft auf die Formattabellesprintf verweisen. In diesem Beispiel '%02d'wird jedoch eine Ganzzahl ( d) gedruckt , die mindestens 2 Zeichen ( 2) enthält, und mit Leerzeichen anstelle von Leerzeichen ( 0) links aufgefüllt .

Mark Rushakoff
quelle
Danke Mark !! Perfekt =) Danke!
sjsc
Sie sollten wahrscheinlich %02ifür diesen Fall verwenden, da es offensichtlicher ist, dass die Ausgabe eine Ganzzahl ist und sein soll. D ist weniger intuitiv für Personen, die nicht so an die Verwendung gewöhnt sind sprintf.
SeanJA
Sie können einfach '%02d'%1ohne Sprintf
Qiushi Huang
194

Viele Leute verwenden sprintf(was das Richtige ist), und ich denke, wenn Sie dies für eine Zeichenfolge tun möchten, ist es am besten, die rjustund ljustMethoden zu beachten :

"4".rjust(2, '0')

Dadurch wird das "4"Recht gerechtfertigt, indem sichergestellt wird, dass es mindestens 2Zeichen lang ist, und es mit aufgefüllt wird '0'. ljustmacht das Gegenteil.

Ryan Bigg
quelle
2
Dies ist nur dann besser als sprintf, wenn Sie Zeichenfolgen zulassen möchten. Andernfalls würde ich sprintf verwenden, da es eine Ausnahme auslöst (wie es sollte), wenn ich versehentlich einen String verwende.
Velizar Hristov
Wenn Sie wissen, dass Sie mit einer Zeichenfolgendarstellung einer Zahl beginnen, gefällt mir dies für die Leistung besser als sprintf. Durch rjustdie Verwendung werden die Kosten für das Parsen der Sprintf-Formatzeichenfolge, das Konvertieren einer Zeichenfolge in eine Zahl und das Zurückkonvertieren dieser Zahl in eine Zeichenfolge vermieden. Außerdem ist es für einen Menschen (wohl) leicht zu verstehen, was der Code auf einen Blick versucht.
David Hempy