2012-07-16 10 views
5

Wie Sie in Ruby kennen, können Sie tunwie zu tun Nummer String Suffix

"%03d" % 5 
#=> "005" 

"%03d" % 55 
#=> "055" 

"%03d" % 555 
#=> "555" 

so dass im Grunde Nummer wird „0“ Präfix für 3 String Orte haben

nur Möglichkeit Nummer zu tun, ist es fragen String Suffix auf ähnliche nette Weise? (bitte keine if-Anweisungen)

something 5 
#=> 500 

something 55 
#=> 550 

something 555 
# => 555 

Antwort

7

wie etwa ljust Methode?

"5".ljust(3, "0") 

und einige to_s und to_i Methode aufruft, wenn Sie das tun wollen, um ganze Zahlen

Sie String-Konvertierung mit etwas mehr Mathematik wie log_10 vermeiden könnte Anzahl der Stellen in einer ganzen Zahl zu finden und dann i *= 10**x wo x

wie das ist, wie viele Sie mehr 0en brauchen:

def something(int, power=3) 
    int * 10**([power - Math.log10(int).to_i - 1, 0].max) 
end 
+0

wirklich schön, so Ihr Vorschlag für die Geschwindigkeit ist die log10-Lösung? etwas schwerer als die ljust Lösung erscheint mir – equivalent8

+0

ich Speed-Test durchgeführt, ist die „ljust“ Lösung schnellste Lösung https://gist.github.com/3122349 (und sauberer :)) – equivalent8

+0

gut Ihr Test ist nicht ganz fair zu die int-Version, da Sie keine Ganzzahl <-> String-Konvertierung testen. Überprüfen Sie dies: https://gist.github.com/3122511 - signifikanter Unterschied zugunsten von log10. + muss erwähnen, dass [] .max der Flaschenhals war, da es bei jeder Iteration ein neues Array-Objekt erzeugte. max Methode kann natürlich mit vielen besseren Leistung inlined wird :) – keymone

0

Wie wäre es

def prettify(n) 
    ("%03d" % (n.to_s.reverse.to_i)).to_s.reverse 
    end 

die

  • Ihre Nummer Zeichenfolge konvertiert
  • es kehrt
  • wandelt es zurück auf eine Reihe
  • Formate es
  • es ein wandelt zurück int
  • kehrt es wieder um

dieses Stück Code pflegen könnte von jetzt eine Herausforderung, ein paar Monate worden, natürlich :-)

+0

es ist eine Lösung, sondern mehr wie die „ljust“ von Rubin zur Verfügung gestellt sofort http://ruby-doc.org/core-1.9.3/String.html#method-i-ljust – equivalent8