轨道中的前导零


152

我的应用程序中有字段hrmin,都是整数。对于hr字段,如果用户输入“ 1”,我希望Rails在将其保存到数据库之前将其自动填充为“ 01”。同样对于该min字段,如果用户输入“ 0”,则应将其输入为“ 00”。

我怎样才能做到这一点?

Answers:


336

最好将其存储为整数,然后按照运行时中的描述进行显示。每种语言都有自己的补零方式-对于Ruby,您可以使用String#rjust。此方法使用给定的填充字符填充字符串(右对齐),使其变为给定的长度。

str.rjust(integer, padstr=' ') → new_str

如果integer大于的长度str,则返回一个新String的长度integerstr右对齐并用填充padstr; 否则,返回str

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'

60

您可以使用以下方法将整数转换为该类型的字符串:

result_string = '%02i' % your_integer

这与如何将其保存在数据库中无关。


20

这也很方便:

"%.2d" % integer

结果字符串将为2个字符,如果数字少于2个字符,则字符串中将出现0s


8

您不能将其存储01为整数。它将转换为1

您可以将其存储为字符串,也可以将其显示为字符串“ 01”


4
建议将其存储为整数并显示为字符串(用0填充)。Apache的Java StringUtils有一个不错的pad方法。在填充上发现了该线程:ruby-forum.com/topic/82137
McStretch 2011年

6

我喜欢%运算符,即使它似乎已不受欢迎。

2.0.0-p247 :001 > '%02i' % 1
 => "01"
2.0.0-p247 :002 > '%2i' % 1
 => " 1"
2.0.0-p247 :003 > '%-2i' % 1
 => "1 "

3

实现此目的的另一种方法是使用sprintf在显示时填充整数:

f = sprintf '%04d', 49
# f = "0049"

-5

试试这个,您可以更改它们以匹配

def numeric92(num)
  if num.present?
    if num < 0 && num > -1
      ('-%05d' % num) + '.' + ('%.2f' % num).split('.').last
    else
      ('%06d' % num) + '.' + ('%.2f' % num).split('.').last
    end
  else
    '000000.00'
  end
end

1
到底if num < 0 && num > -1是什么?
Francisco Quintero
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.