我有字段hr
和min
,在我的应用程序中都是整数。对于hr
字段,如果用户输入“1”,我希望Rails在将它保存到数据库之前自动将它填充到“01”。对于min
字段,如果用户输入“0”,它应该输入为“00”。导轨中的前导零点
我该怎么做?
我有字段hr
和min
,在我的应用程序中都是整数。对于hr
字段,如果用户输入“1”,我希望Rails在将它保存到数据库之前自动将它填充到“01”。对于min
字段,如果用户输入“0”,它应该输入为“00”。导轨中的前导零点
我该怎么做?
它会更好,将其存储为一个整数,当你在运行时描述只是显示它。每种语言都有自己的填充零的方式 - 对于Ruby,您可以使用String#rjust。此方法使用给定的填充字符填充字符串(右对齐),使其成为给定长度。
str.rjust(integer, padstr=' ') → new_str
如果
integer
大于str
长度,则返回一个长度integer
与str
右对齐和填充与padstr
新String
;否则,返回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'
不能将01
作为整数存储。这将被转换为1
你可以将它保存为一个字符串,也可以显示它作为一个字符串“01”
您可以将整成那样的一个字符串:
result_string = '%02i' % your_integer
这与它在数据库中的保存方式无关。
这也是很方便:
"%.2d" % integer
所得字符串将是2个字符,并且如果数目是小于2个字符,然后0将字符串
在存在试试这个,你可以改变它们匹配
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
如果num < 0 && num > -1'是什么? – Francisco 2015-11-23 21:37:47
另一种实现这种方式是你垫在显示时间的整数,使用的sprintf:
f = sprintf '%04d', 49
# f = "0049"
我喜欢%操作,即使它似乎已经失宠......
2.0.0-p247 :001 > '%02i' % 1
=> "01"
2.0.0-p247 :002 > '%2i' % 1
=> " 1"
2.0.0-p247 :003 > '%-2i' % 1
=> "1 "
将它作为一个整数存储并显示为一个字符串(用0填充)将是我的建议。 Apache的Java StringUtils有一个很好的pad方法。在padding上找到这个线程:http://www.ruby-forum.com/topic/82137 – McStretch 2011-04-27 20:58:37