【发布时间】:2011-08-14 04:56:35
【问题描述】:
我的应用程序中有字段hr 和min,这两个字段都是整数。对于hr 字段,如果用户输入“1”,我希望Rails 在将其保存到数据库之前自动将其填充为“01”。对于min 字段,如果用户输入“0”,它应该输入为“00”。
我该怎么做?
【问题讨论】:
标签: ruby regex ruby-on-rails-3
我的应用程序中有字段hr 和min,这两个字段都是整数。对于hr 字段,如果用户输入“1”,我希望Rails 在将其保存到数据库之前自动将其填充为“01”。对于min 字段,如果用户输入“0”,它应该输入为“00”。
我该怎么做?
【问题讨论】:
标签: ruby regex ruby-on-rails-3
最好将其存储为整数并按照您在运行时的描述显示它。每种语言都有自己的补零方式——对于 Ruby,您可以使用 String#rjust。此方法使用给定的填充字符填充字符串(右对齐),使其变为给定长度。
str.rjust(integer, padstr=' ') → new_str如果
integer大于str的长度,则返回一个长度为integer的新String,str右对齐并用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'
【讨论】:
你可以将整数转换成这样的字符串:
result_string = '%02i' % your_integer
这与它在数据库中的保存方式无关。
【讨论】:
这也很方便:
"%.2d" % integer
结果字符串为 2 个字符,如果数字少于 2 个字符,则字符串中将出现 0
【讨论】:
您不能将01 存储为整数。它将被转换为1
可以将其存储为字符串,也可以将其显示为字符串“01”
【讨论】:
我喜欢 % 运算符,尽管它似乎已经失宠...
2.0.0-p247 :001 > '%02i' % 1
=> "01"
2.0.0-p247 :002 > '%2i' % 1
=> " 1"
2.0.0-p247 :003 > '%-2i' % 1
=> "1 "
【讨论】:
实现此目的的另一种方法是在显示时填充整数,使用 sprintf:
f = sprintf '%04d', 49
# f = "0049"
【讨论】:
试试这个,你可以改变它们以匹配
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
【讨论】:
if num < 0 && num > -1 到底是什么?