2010-04-22 7 views
94

Ich suche wie so einstelligen Zahlen zu zweistelligen Zahlen konvertieren:Ruby on Rails: Wie fügen Sie Nullen vor einer Zahl hinzu, wenn sie unter 10 ist?

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

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

Antwort

124

Meinten Sie sprintf '%02d', n?

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

Sie könnten die format table for sprintf in der Zukunft referenzieren wollen, aber für dieses spezielle Beispiel '%02d' bedeutet eine ganze Zahl (d) Aufnahme mindestens 2 Zeichen (2) und links Auffüllen mit Nullen anstelle von Leerzeichen zu drucken, (0).

+0

Danke Mark !! Perfekt =) Danke! – sjsc

+0

Sie sollten wahrscheinlich '% 02i' für diesen Fall verwenden, da es offensichtlicher ist, dass die Ausgabe eine Ganzzahl ist und sein soll, d ist weniger intuitiv für Leute, die nicht so daran gewöhnt sind,' sprintf' zu verwenden. – SeanJA

6

Versuchen Sie dies, sollte es funktionieren:

abc= 5 
puts "%.2i" %abc >> 05 


abc= 5.0 
puts "%.2f" %abc >> 5.00 
+0

Awesome, Genau das, was ich gesucht habe. Gibt es Unterlagen oder wie sind Sie dazu gekommen? – TheMouseMan

167

Eine Menge Leute mit sprintf (was das Richtige zu tun ist), und ich denke, wenn man diese für eine Zeichenfolge tun wollen, es ist am besten ein

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

das die "4" macht richtig gerechtfertigt, indem sichergestellt wird es mindestens 2 Zeichen lang: im Auge zu behalten die rjust und ljust Methoden d pad es mit '0'. ljust macht das Gegenteil.

+2

Dies ist nur besser als sprintf, wenn Sie Strings zulassen wollen. Andernfalls würde ich sprintf verwenden, da es eine Ausnahme (wie es sollte) löst, wenn ich versehentlich eine Zeichenfolge verwende. –

Verwandte Themen