我有字段hr
和min
,在我的應用程序中都是整數。對於hr
字段,如果用戶輸入「1」,我希望Rails在將它保存到數據庫之前自動將它填充到「01」。對於min
字段,如果用戶輸入「0」,它應該輸入爲「00」。導軌中的前導零點
我該怎麼做?
我有字段hr
和min
,在我的應用程序中都是整數。對於hr
字段,如果用戶輸入「1」,我希望Rails在將它保存到數據庫之前自動將它填充到「01」。對於min
字段,如果用戶輸入「0」,它應該輸入爲「00」。導軌中的前導零點
我該怎麼做?
它會更好,將其存儲爲一個整數,當你在運行時描述只是顯示它。每種語言都有自己的填充零的方式 - 對於Ruby,您可以使用String#rjust。此方法使用給定的填充字符填充字符串(右對齊),使其成爲給定長度。
str.rjust(integer, padstr=' ') → new_str
如果
integer
大於str
長度,則返回一個長度integer
與str
右對齊和填充與padstr
新String
;否則,返回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'
不能將01
作爲整數存儲。這將被轉換爲1
你可以將它保存爲一個字符串,也可以顯示它作爲一個字符串「01」
您可以將整成那樣的一個字符串:
result_string = '%02i' % your_integer
這與它在數據庫中的保存方式無關。
這也是很方便:
"%.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
如果num < 0 && num > -1'是什麼? – Francisco 2015-11-23 21:37:47
另一種實現這種方式是你墊在顯示時間的整數,使用的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 "
將它作爲一個整數存儲並顯示爲一個字符串(用0填充)將是我的建議。 Apache的Java StringUtils有一個很好的pad方法。在padding上找到這個線程:http://www.ruby-forum.com/topic/82137 – McStretch 2011-04-27 20:58:37