Ruby on Rails: Bagaimana cara menambahkan angka nol di depan angka jika di bawah 10?

110

Saya ingin mengubah angka satu digit menjadi angka dua digit seperti ini:

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

Saya pikir saya bisa meletakkan banyak pernyataan jika-lain (jika angkanya di bawah 10, maka lakukan gsub) tetapi angka itu pengkodean yang mengerikan. Saya tahu Rails memiliki number_with_precision tetapi saya melihat bahwa itu hanya berlaku untuk angka desimal. Adakah ide tentang cara mengubah satu digit menjadi dua digit?

sjsc
sumber

Jawaban:

142

Apakah maksud Anda sprintf '%02d', n?

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

Anda mungkin ingin mereferensikan tabel format untuksprintf di masa mendatang, tetapi untuk contoh khusus ini '%02d'berarti mencetak integer ( d) yang mengambil setidaknya 2 karakter ( 2) dan padding kiri dengan nol, bukan spasi ( 0).

Mark Rushakoff
sumber
Terima kasih Mark !! Sempurna =) Terima kasih!
sjsc
Anda mungkin harus menggunakan %02iuntuk kasus ini karena lebih jelas bahwa outputnya dan seharusnya bilangan bulat, d kurang intuitif untuk orang yang tidak terbiasa menggunakan sprintf.
SeanJA
Anda bisa '%02d'%1tanpa sprintf
Qiushi Huang
194

Banyak orang menggunakan sprintf(yang merupakan hal yang benar untuk dilakukan), dan saya pikir jika Anda ingin melakukan ini untuk sebuah string , sebaiknya ingat metode rjustdan ljust:

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

Ini akan membuat "4"hak dibenarkan dengan memastikan setidaknya 2panjang karakter dan melapisinya '0'. ljustmelakukan sebaliknya.

Ryan Bigg
sumber
2
Ini hanya lebih baik daripada sprintf jika Anda ingin mengizinkan string. Jika tidak, saya akan menggunakan sprintf, karena itu melempar pengecualian (seperti seharusnya) jika saya tidak sengaja menggunakan string.
Velizar Hristov
Jika Anda tahu Anda memulai dengan representasi string dari sebuah angka, saya lebih suka ini daripada sprintf untuk performa. Penggunaan rjustmenghindari biaya penguraian string format sprintf, mengonversi string menjadi angka, dan mengonversi angka itu kembali menjadi string. Plus, (bisa dibilang) mudah bagi manusia untuk memahami apa yang coba dilakukan kode secara sekilas.
David Hempy