It'd be better to store it as an integer and just display it as you described on runtime. Every language has its own way to pad zeros - for Ruby you can use String#rjust. This method pads a string (right-justified) so that it becomes a given length, using a given padding character.
str.rjust(integer, padstr=' ') → new_str
If
integer
is greater than the length ofstr
, returns a newString
of lengthinteger
withstr
right justified and padded withpadstr
; otherwise, returnsstr
.
some_int = 5
some_int.to_s.rjust(2, '0') # => '05'
some_int.to_s.rjust(5, '0') # => '00005'
another_int = 150
another_int.to_s.rjust(2, '0') # => '150'
another_int.to_s.rjust(3, '0') # => '150'
another_int.to_s.rjust(5, '0') # => '00150'
You can transform the integer into a string of that kind with:
result_string = '%02i' % your_integer
This is independent from how it gets saved in the db.
This is also quite handy:
"%.2d" % integer
The resultant string will be of 2 characters and if the number is of less than 2 characters, then 0s will be present in the string
You can't store 01
as integer. It will be converted to 1
You can store it as a string, or you can show it as a string "01"
I like the % operator, even though it seems to have gone out of favor...
2.0.0-p247 :001 > '%02i' % 1
=> "01"
2.0.0-p247 :002 > '%2i' % 1
=> " 1"
2.0.0-p247 :003 > '%-2i' % 1
=> "1 "
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With