레일에서 선행 0


152

내 응용 프로그램에 필드 hrmin정수가 있습니다. 들어 hr필드에 사용자가 입력 한 경우 "1"나는 데이터베이스에 저장하기 전에 "01"에 자동으로 패드에 레일을 부탁합니다. 또한 min사용자가 "0"을 입력하면 "00"으로 입력해야합니다.

어떻게해야합니까?

답변:


336

정수로 저장하고 런타임에 설명 된대로 표시하는 것이 좋습니다. 모든 언어에는 제로를 채우는 고유 한 방법이 있습니다. Ruby의 경우 String # rjust를 사용할 수 있습니다 . 이 메소드는 주어진 패딩 문자를 사용하여 주어진 길이가되도록 문자열을 오른쪽으로 정렬합니다.

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

경우 integer의 길이보다 큰 경우 str, 새로운 반환 String길이 integerstr오른쪽 정렬 및 패딩을 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'

60

다음을 사용하여 정수를 해당 종류의 문자열로 변환 할 수 있습니다.

result_string = '%02i' % your_integer

이것은 데이터베이스에 저장되는 방법과는 독립적입니다.


20

이것은 또한 매우 편리합니다.

"%.2d" % integer

결과 문자열은 2 자이며 숫자가 2 자보다 적 으면 문자열에 0이 나타납니다.


8

01정수로 저장할 수 없습니다 . 로 변환됩니다1

문자열로 저장하거나 문자열 "01"로 표시 할 수 있습니다.


4
정수로 저장하고 문자열 (0으로 채워짐)을 표시하는 것이 좋습니다. 아파치의 Java StringUtils에는 이와 같은 멋진 패드 메소드가 있습니다. 패딩에서이 글타래를 찾았습니다 : ruby-forum.com/topic/82137
McStretch

6

선호하지 않는 것처럼 보이지만 % 연산자를 좋아합니다 ...

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

3

이를 달성하는 또 다른 방법은 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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.