2011-04-27 61 views
125

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

我该怎么做?

回答

277

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

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

如果integer大于str长度,则返回一个长度integerstr右对齐和填充与padstrString;否则,返回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' 
8

不能将01作为整数存储。这将被转换为1

你可以将它保存为一个字符串,也可以显示它作为一个字符串“01”

+4

将它作为一个整数存储并显示为一个字符串(用0填充)将是我的建议。 Apache的Java StringUtils有一个很好的pad方法。在padding上找到这个线程:http://www.ruby-forum.com/topic/82137 – McStretch 2011-04-27 20:58:37

16

这也是很方便:

"%.2d" % integer 

所得字符串将是2个字符,并且如果数目是小于2个字符,然后0将字符串

在存在
-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

如果num < 0 && num > -1'是什么? – Francisco 2015-11-23 21:37:47

1

另一种实现这种方式是你垫在显示时间的整数,使用的sprintf:

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

我喜欢%操作,即使它似乎已经失宠......

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