Ruby on Rails : 숫자가 10 미만인 경우 숫자 앞에 0을 어떻게 추가합니까?


110

한 자리 숫자를 다음과 같이 두 자리 숫자로 변환하려고합니다.

9 ==> 09
5 ==> 05
12 == 12
4 ==> 04

나는 if-else 문을 여러 개 넣을 수 있다고 생각하지만 (숫자가 10 미만이면 gsub를 수행하십시오) 끔찍한 코딩입니다. Rails에 number_with_precision이 있지만 십진수에만 적용된다는 것을 알고 있습니다. 한 자리를 두 자리로 변환하는 방법에 대한 아이디어가 있습니까?

답변:


142

그랬어 sprintf '%02d', n?

irb(main):003:0> sprintf '%02d', 1
=> "01"
irb(main):004:0> sprintf '%02d', 10
=> "10"

나중에 형식 테이블sprintf 을 참조하고 싶을 수 있지만이 특정 예 에서는 최소 2 자 ( )를 차지하는 '%02d'정수 ( d) 를 인쇄하고 2공백 ( 0) 대신 0으로 왼쪽 채우기 를 인쇄하는 것을 의미합니다 .


마크 감사합니다 !! 완벽한 =) 감사합니다!
sjsc 2010

%02i출력이 정수이고 정수 여야한다는 것이 더 분명하기 때문에이 경우에 사용해야 할 것입니다 . d는 사용에 익숙하지 않은 사람들에게는 덜 직관적입니다 sprintf.
SeanJA

당신은 할 수 단순히 '%02d'%1sprintf를하지 않고
Qiushi 황

194

많은 사람들이 sprintf(올바른 일입니다) 사용하고 있으며 문자열에 대해 이것을 수행 하려면 rjustljust메서드 를 염두에 두는 것이 가장 좋습니다 .

"4".rjust(2, '0')

이렇게하면 "4"최소한 2문자 길이인지 확인하고 '0'. ljust그 반대입니다.


2
문자열을 허용하려는 경우에만 sprintf보다 낫습니다. 그렇지 않으면 실수로 문자열을 사용하면 예외가 발생하기 때문에 sprintf를 사용합니다.
Velizar Hristov 15.01.09

숫자의 문자열 표현으로 시작하는 것을 알고 있다면 성능면에서 sprintf보다 더 좋습니다. 를 사용 rjust하면 sprintf의 형식 문자열을 구문 분석하고 문자열을 숫자로 변환하고 해당 숫자를 다시 문자열로 변환하는 비용을 피할 수 있습니다. 또한 사람이 코드가 수행하려는 작업을 한 눈에 쉽게 이해할 수 있습니다.
David Hempy 19


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.