루비의 선행 0
나는 들판이 있습니다.hr
그리고.min
두 정수 모두 내 지원서에 있습니다.위해서hr
필드에서 사용자가 "1"을 입력하면 데이터베이스에 저장하기 전에 레일즈가 자동으로 "01"에 패딩하기를 원합니다.의 경우에도min
필드에 "0"을 입력하면 "00"으로 입력해야 합니다.
어떻게 해야 하나요?
정수로 저장하고 런타임에 설명한 대로 표시하는 것이 좋습니다.모든 언어에는 0을 패딩하는 고유한 방법이 있습니다. Ruby의 경우 String#rjust를 사용할 수 있습니다.이 메서드는 주어진 패딩 문자를 사용하여 주어진 길이가 되도록 문자열을 패딩합니다(오른쪽 맞춤).
str.rjust(integer, padstr=' ') → new_str
한다면
integer
의 길이보다 큼str
새 항목을 반환합니다.String
길이가 긴integer
와 함께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
이것은 DB에 저장되는 방법과 무관합니다.
이 기능은 매우 유용합니다.
"%.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
언급URL : https://stackoverflow.com/questions/5810468/leading-zeros-in-ruby
'programing' 카테고리의 다른 글
RSpeclet()을 사용해야 하는 경우 (0) | 2023.05.31 |
---|---|
레일 인증 토큰 이해 (0) | 2023.05.31 |
여러 매개 변수를 전달하는 루비 전송 방법 (0) | 2023.05.31 |
Android Studio와 Eclipse 중 어떤 Android IDE가 더 낫습니까? (0) | 2023.05.31 |
Git과 함께 프로젝트의 첫 번째 커밋을 변경하시겠습니까? (0) | 2023.05.31 |