2012-07-16 14 views
5

Come sapete in Ruby si può farecome fare il numero di suffisso stringa

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

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

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

in modo sostanzialmente numero avrà "0" prefisso per 3 posti di stringa

Chiedo solo c'è la possibilità di fare il numero suffisso di stringa in modo molto simile? (per favore no, se le dichiarazioni)

something 5 
#=> 500 

something 55 
#=> 550 

something 555 
# => 555 

risposta

7

come circa il metodo ljust?

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

e alcuni to_s e to_i metodo di chiamate se si vuole fare questo a interi

si potrebbe evitare la conversione stringa con po 'di più la matematica come log_10 per trovare il numero di cifre in un intero e poi i *= 10**x dove x è quanti altri 0 vi serve

come questo:

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

davvero bello, così il vostro suggerimento per la velocità è la soluzione log10? mi sembra un po 'più pesante della soluzione di isolamento – equivalent8

+0

Ho fatto il test di velocità, la soluzione "ljust" è la soluzione più veloce https://gist.github.com/3122349 (e più pulita :)) – equivalent8

+0

bene il tuo test non è esattamente giusto per la versione int come non testare la conversione di stringa intero <-> stringa. controllare questo: https://gist.github.com/3122511 - differenza significativa a favore di log10. + devo menzionare che [] .max era il collo di bottiglia mentre stava creando un nuovo oggetto array su ogni iterazione. il metodo max può essere sottolineato con prestazioni molto migliori ovviamente :) – keymone

0

Come su

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

che

  • converte il proprio numero a stringa
  • inverte
  • converte di nuovo ad un certo numero
  • formati che è in
  • converte di nuovo ad un int
  • lo inverte nuovamente

Il mantenimento di questo pezzo di codice potrebbe diventare una sfida un paio di mesi da oggi, ovviamente :-)

+0

è una soluzione, ma più che "ljust" viene fornita da ruby ​​direttamente http://ruby-doc.org/core-1.9.3/String.html#method-i-ljust – equivalent8

Problemi correlati