Ruby on Rails: Jak dodać zera przed liczbą, jeśli jest poniżej 10?


110

Chcę przekonwertować liczby jednocyfrowe na liczby dwucyfrowe, na przykład:

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

Myślę, że mógłbym umieścić kilka instrukcji if-else (jeśli liczba jest mniejsza niż 10, zrób gsub), ale to okropne kodowanie. Wiem, że Railsy mają number_with_precision, ale widzę, że dotyczy to tylko liczb dziesiętnych. Jakieś pomysły, jak zamienić pojedyncze cyfry na dwucyfrowe?

Odpowiedzi:


142

Czy miałeś na myśli sprintf '%02d', n?

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

W przyszłości możesz chcieć odwołać się do tabeli formatówsprintf , ale w tym konkretnym przykładzie '%02d'oznacza to wydrukowanie liczby całkowitej ( d) składającej się z co najmniej 2 znaków ( 2) i wypełnionej po lewej stronie zerami zamiast spacji ( 0).


Dziękuję Mark !! Perfect =) Dziękuję!
sjsc

Prawdopodobnie powinieneś użyć %02iw tym przypadku, ponieważ jest bardziej oczywiste, że wynik jest i powinien być liczbą całkowitą, d jest mniej intuicyjny dla osób, które nie są tak przyzwyczajone do używania sprintf.
SeanJA

możesz po prostu '%02d'%1bez sprintu
Qiushi Huang

194

Wiele osób używa sprintf(co jest słuszne) i myślę, że jeśli chcesz to zrobić dla ciągu znaków , najlepiej pamiętać o metodach rjusti ljust:

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

Spowoduje to, że "4"prawo będzie uzasadnione, upewniając się, że ma co najmniej 2znaki i dopełnia je '0'. ljustrobi odwrotnie.


2
Jest to lepsze niż sprintf tylko wtedy, gdy chcesz zezwolić na ciągi. W przeciwnym razie użyłbym sprintf, ponieważ zgłasza wyjątek (tak jak powinien), jeśli przypadkowo użyję ciągu.
Velizar Hristov

Jeśli wiesz, że zaczynasz od ciągu reprezentującego liczbę, podoba mi się to bardziej niż sprintf pod względem wydajności. Użycie rjustpozwala uniknąć kosztu analizowania ciągu formatu sprintf, konwersji ciągu na liczbę i konwersji tej liczby z powrotem na ciąg. Poza tym (prawdopodobnie) człowiekowi łatwo jest zrozumieć, co próbuje zrobić kod na pierwszy rzut oka.
David Hempy


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.