programing

루비의 선행 0

closeapi 2023. 5. 31. 15:56
반응형

루비의 선행 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

반응형