Ruby中的前导零

159
我在应用程序中有两个整数字段hrmin。 对于hr字段,如果用户输入"1",我希望Rails在保存到数据库之前自动将其填充为"01"。 对于min字段,如果用户输入"0",它应该以"00"形式输入。
我该如何实现这个功能?
7个回答

355

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

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

如果integer大于str的长度,则返回一个新的长度为integerString,其中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'

62

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

result_string = '%02i' % your_integer

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


22

这也非常方便:

"%.2d" % integer

结果字符串将是2个字符,如果数字少于2个字符,则字符串中将存在0s。


8

你不能将01存储为整数。它会被转换为1

你可以将其存储为字符串,或者将其显示为字符串"01"


4
我的建议是将其存储为整数并作为字符串显示(用0填充)。Apache的Java StringUtils库有一个很好的填充方法。在这个链接中可以找到关于填充的讨论:http://www.ruby-forum.com/topic/82137 - McStretch

7

我喜欢百分号操作符,尽管它似乎已经不受青睐了...

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

4
另一种实现方法是在显示时使用sprintf对整数进行填充:
f = sprintf '%04d', 49
# f = "0049"

-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
if num < 0 && num > -1 是什么意思? - Francisco Quintero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接