Ruby 中的前导零

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

我怎么能这么做?

77875 次浏览

不能将 01存储为整数,它将被转换为 1

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

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

result_string = '%02i' % your_integer

这与它在数据库中的保存方式无关。

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

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

如果 integer大于 str的长度,返回一个长度为 integer的新 Stringstr右对齐并用 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'

这也很方便:

"%.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 "