Een getal opvullen met nullen

Hoe representeer ik een getal user.idals een string met:

  • 00naar links opgevuld als user.idtussen 0 en 9 ligt

    # => "00#{user.id}"

  • 0opgevuld als user.idtussen 10 en 99 ligt

    # => "0#{user.id}"

  • anders niets opgevuld

    # => "#{user.id}"

Bijvoorbeeld, met user.id = 1, zou het "001"produceren, met user.id = 11, zou het "011"produceren, en met user.id = 111, zou het "111"produceren.


Antwoord 1, autoriteit 100%

puts 1.to_s.rjust(3, "0")
#=> 001
puts 10.to_s.rjust(3, "0")
#=> 010
puts 100.to_s.rjust(3, "0")
#=> 100

De bovenstaande code converteert uw user.id naar een tekenreeks, waarna de String.rjust()-methode rekening houdt met de lengte en het juiste aantal nullen voorvoegt.


Antwoord 2, autoriteit 41%

Je kunt beter de tekenreeksindeling gebruiken.

"%03d" % 1    #=> "001"
"%03d" % 10   #=> "010"
"%03d" % 100  #=> "100"
"%03d" % user.id # => what you want

Antwoord 3, autoriteit 5%

String#rjust:

user.id
#⇒ 5
user.id.to_s.rjust(3, '0')
#⇒ "005"

Antwoord 4, autoriteit 4%

Je kunt het proberen met de string "'%03d' % #{user.id}"


Antwoord 5, autoriteit 2%

Kernel#formatof Kernel#sprintfkan ook worden gebruikt:

format('%03d', user.id)
# or
sprintf('%03d', user.id)

Als een kanttekening worden Kernel#formatof Kernel#sprintfaanbevolen boven String#%vanwege de dubbelzinnigheid van de %operator (bijvoorbeeld het zien van a % bin de code maakt niet duidelijk of dit integer modulo is, of string formaat). Ook %neemt als argumenten een array, wat kan betekenen dat een nieuw object moet worden toegewezen, wat een (misschien onbeduidende, maar aanwezige) prestatiestraf kan opleveren.

Other episodes