2011-04-27 56 views
125

我有字段hrmin,在我的應用程序中都是整數。對於hr字段,如果用戶輸入「1」,我希望Rails在將它保存到數據庫之前自動將它填充到「01」。對於min字段,如果用戶輸入「0」,它應該輸入爲「00」。導軌中的前導零點

我該怎麼做?

回答

277

它會更好,將其存儲爲一個整數,當你在運行時描述只是顯示它。每種語言都有自己的填充零的方式 - 對於Ruby,您可以使用String#rjust。此方法使用給定的填充字符填充字符串(右對齊),使其成爲給定長度。

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

如果integer大於str長度,則返回一個長度integerstr右對齊和填充與padstrString;否則,返回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' 
8

不能將01作爲整數存儲。這將被轉換爲1

你可以將它保存爲一個字符串,也可以顯示它作爲一個字符串「01」

+4

將它作爲一個整數存儲並顯示爲一個字符串(用0填充)將是我的建議。 Apache的Java StringUtils有一個很好的pad方法。在padding上找到這個線程:http://www.ruby-forum.com/topic/82137 – McStretch 2011-04-27 20:58:37

16

這也是很方便:

"%.2d" % integer 

所得字符串將是2個字符,並且如果數目是小於2個字符,然後0將字符串

在存在
-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

如果num < 0 && num > -1'是什麼? – Francisco 2015-11-23 21:37:47

1

另一種實現這種方式是你墊在顯示時間的整數,使用的sprintf:

f = sprintf '%04d', 49 
# f = "0049" 
4

我喜歡%操作,即使它似乎已經失寵......

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