我的应用程序中有字段 hr和 min两个整数。对于 hr字段,如果用户输入“1”,我希望 Rails 在将其保存到数据库之前自动将其填充到“01”。对于 min字段,如果用户输入“0”,它应该输入“00”。
hr
min
我怎么能这么做?
不能将 01存储为整数,它将被转换为 1
01
1
您可以将其存储为字符串,也可以将其显示为字符串“01”
您可以使用以下方法将整数转换为这种类型的字符串:
result_string = '%02i' % your_integer
这与它在数据库中的保存方式无关。
最好将它存储为一个整数,并按照您在运行时所描述的方式显示它。每种语言都有自己的填充零的方式——对于 Ruby,你可以使用 字符串 # rjust。此方法使用给定的填充字符填充字符串(右对齐) ,使其成为给定长度。
str.rjust(integer, padstr=' ') → new_str 如果 integer大于 str的长度,返回一个长度为 integer的新 String,str右对齐并用 padstr填充; 否则返回 str。
str.rjust(integer, padstr=' ') → new_str
如果 integer大于 str的长度,返回一个长度为 integer的新 String,str右对齐并用 padstr填充; 否则返回 str。
integer
str
String
padstr
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'
这也很方便:
"%.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
实现这一点的另一种方法是在显示时填充整数,使用 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 "