Ruby on Rails: Làm cách nào để bạn thêm các số không vào trước một số nếu nó dưới 10?


110

Tôi đang tìm cách chuyển các số có một chữ số thành các số có hai chữ số như sau:

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

Tôi nghĩ rằng tôi có thể đặt một loạt các câu lệnh if-else (nếu số dưới 10, sau đó thực hiện một gsub) nhưng con số đó là mã hóa khủng khiếp. Tôi biết Rails có number_with_pre precision nhưng tôi thấy rằng nó chỉ áp dụng cho các số thập phân. Bất kỳ ý tưởng về cách chuyển đổi từ một chữ số sang hai chữ số?

Câu trả lời:


142

Ý bạn là sprintf '%02d', n?

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

Bạn có thể muốn tham chiếu đến bảng định dạngsprintf trong tương lai, nhưng đối với ví dụ cụ thể này '%02d'có nghĩa là in một số nguyên ( d) chiếm ít nhất 2 ký tự ( 2) và phần đệm bên trái bằng số không thay vì dấu cách ( 0).


Cảm ơn Mark !! Hoàn hảo =) Cảm ơn bạn!
sjsc

Bạn có thể nên sử dụng %02icho trường hợp này vì rõ ràng hơn là đầu ra là và được cho là số nguyên, d ít trực quan hơn đối với những người không quen sử dụng sprintf.
SeanJA

bạn có thể chỉ đơn giản là '%02d'%1không sprintf
Qiushi Huang

194

Rất nhiều người sử dụng sprintf(đó là điều đúng đắn nên làm), và tôi nghĩ nếu bạn muốn làm điều này cho một chuỗi thì tốt nhất hãy ghi nhớ các phương thức rjustljust:

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

Điều này sẽ làm cho điều "4"đúng đắn được hợp lý bằng cách đảm bảo nó 2dài ít nhất ký tự và đệm nó bằng '0'. ljustlàm ngược lại.


2
Điều này chỉ tốt hơn sprintf nếu bạn muốn cho phép các chuỗi. Nếu không, tôi sẽ sử dụng sprintf, vì nó ném ra một ngoại lệ (giống như nó nên xảy ra) nếu tôi vô tình sử dụng một chuỗi.
Velizar Hristov

Nếu bạn biết bạn đang bắt đầu với biểu diễn chuỗi của một số, tôi thích điều này hơn sprintf về hiệu suất. Việc sử dụng rjusttránh được chi phí phân tích cú pháp chuỗi định dạng của sprintf, chuyển đổi một chuỗi thành một số và chuyển đổi số đó trở lại thành một chuỗi. Thêm vào đó, con người (có thể cho là) ​​dễ dàng hiểu được những gì mã đang cố gắng thực hiện trong nháy mắt.
David Hempy


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.