Hoe representeer ik een getal user.id
als een string met:
-
00
naar links opgevuld alsuser.id
tussen 0 en 9 ligt# => "00#{user.id}"
-
0
opgevuld alsuser.id
tussen 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%
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#format
of Kernel#sprintf
kan ook worden gebruikt:
format('%03d', user.id)
# or
sprintf('%03d', user.id)
Als een kanttekening worden Kernel#format
of Kernel#sprintf
aanbevolen boven String#%
vanwege de dubbelzinnigheid van de %
operator (bijvoorbeeld het zien van a % b
in 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.