轨道中的前导零

时间:2011-04-27 20:55:47

标签: ruby regex ruby-on-rails-3

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

我该怎么做?

7 个答案:

答案 0 :(得分:314)

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

  

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

     

如果integer大于str的长度,则返回String长度为integer的新str padstr右对齐并填充{{1} }};否则,返回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'

答案 1 :(得分:58)

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

result_string = '%02i' % your_integer

这与它在db中的保存方式无关。

答案 2 :(得分:17)

这也很方便:

"%.2d" % integer

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

答案 3 :(得分:8)

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

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

答案 4 :(得分: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 "

答案 5 :(得分:2)

实现此目的的另一种方法是使用sprintf:

在显示时填充整数
android:text="My very own initial value"

答案 6 :(得分:-6)

尝试此操作,您可以将其更改为匹配

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