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?

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 .


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.


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


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.